SQL 2 SELECT vs. 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)}

所以,它最好做一个JOIN为用户和user_过敏症和迭代,或者可能两个SELECT?

但如果我有另一个表,如user_过敏症,结果可以是:

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新手

根据数据—如果第一组结果显示了值,则无法获得所显示的第二组结果。第二个是丢弃数据——在本例中,过敏症'name2'为另一个table_name 'namet3'。这就是为什么你得到许多行重复的数据。

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

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

如果没有,我认为你将不得不在一些业务逻辑中构造JSON,在这种情况下,以3-way连接读取数据是很好的。根据用户id进行排序,并根据用户记录是否存在创建或追加行数据到JSON文档(如果根据用户id进行排序,则只需要跟踪用户id值何时更改)。

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

最新更新