【问题标题】:SQL Two SELECT vs. JOIN best performance?SQL 两个 SELECT vs. JOIN 性能最好?
【发布时间】:2014-08-13 15:05:55
【问题描述】:

我想知道在这种情况下哪个性能更好。首先,我想向用户展示他的医疗信息。我有两张桌子

user
-----
id_user | type_blood | number | ...
   1          O          123
   2          A+         442

user_allergies
-----------
id_user | name
  1       name1
  1       name2

我想回来:

JSON {id_user=1, type_blood=0, allergies=(name1,name2)}

那么,最好为 user 和 user_allergies 做一个 JOIN 并迭代,或者两个 SELECT?

但是如果那时我有另一个像 user_allergies 这样的表,那么结果可能是:

user_another_table
-----------
id_user | name
  1       namet1
  1       namet2
  1       namet3

JSON {id_user=1, type_blood=0, allergies=(name1,name2), table=(namet1,namet2,namet3)}

最好是三个 SELECT 或一个 JOIN,但是我必须对结果进行迭代,我无法想象一种简单的方式。 JOIN 可以给我这样的结果:

id_user | type_blood | allergy_name | another_table_name
   1          O           name1            namet1
   1          O           name1            namet2
   1          O           name1            namet3
   1          O           name2            namet1
   1          O           name2            namet2
   1          O           name2            namet3

有没有办法提取:

id_user | type_blood | allergy_name | another_table_name
   1          O           name1            namet1
   1          O           name2            namet2
   1          O                            namet3

感谢社区,我是 SQL 新手

【问题讨论】:

  • 我不知道该怎么说,只是根据情况说你会JOIN。如果结果集需要来自多个相关表的信息,您可以以一种或另一种方式JOIN它们。

标签: sql performance select join


【解决方案1】:

根据数据 - 如果第一组结果显示值,则无法获得您显示的第二组结果。第二个是丢弃数据 - 在这种情况下,对 another_table_name 'namet3' 的过敏 'name2'。这就是为什么您会返回许多包含重复数据的行。

在某些情况下,您可以使用 group by 子句来限制这一点,但同样 - 它不会让您像那样丢弃数据。

如果您的数据库支持,您可以尝试使用COALESCE 子句。

如果没有,我认为您将不得不在某些业务逻辑中构建您的 JSON,在这种情况下,可以通过 3 路连接读取数据。您按用户 ID 排序,然后根据用户记录是否存在创建或附加行数据到 JSON 文档(如果您按用户 ID 排序,您只需要跟踪用户 ID 值何时更改)。

或者,您可以在一个查询中读取用户列表和单项数据,然后再次 ht 数据库以获取重复数据。

【讨论】:

    猜你喜欢
    • 2015-06-23
    • 1970-01-01
    • 2013-01-13
    • 1970-01-01
    • 2011-11-13
    • 1970-01-01
    • 1970-01-01
    • 2017-11-30
    • 1970-01-01
    相关资源
    最近更新 更多