SQL两个SELECT与JOIN的最佳性能?

时间:2014-06-23 14:14:08

标签: sql performance select join

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

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_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,但是我必须迭代结果,我无法想象一个esay方式。 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的新手

1 个答案:

答案 0 :(得分:0)

根据数据 - 如果第一组结果显示值,则无法获得您已显示的第二组结果。第二个是扔掉数据 - 在这种情况下过敏' name2' for another_table_name' namet3'。这就是为什么你用重复数据得到很多行的原因。

你可以使用group by子句在某些情况下限制这种情况,但是再次 - 它不会让你扔掉这样的数据。

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

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

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