我想知道在这种情况下哪个性能更好。首先,我想向用户展示他的医疗信息。我有两张表
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以获取重复数据。