我想知道在这种情况下哪个有更好的表现。首先,我想向用户展示他的医疗信息。我有两张桌子
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的新手
答案 0 :(得分:0)
根据数据 - 如果第一组结果显示值,则无法获得您已显示的第二组结果。第二个是扔掉数据 - 在这种情况下过敏' name2' for another_table_name' namet3'。这就是为什么你用重复数据得到很多行的原因。
你可以使用group by子句在某些情况下限制这种情况,但是再次 - 它不会让你扔掉这样的数据。
如果您的数据库支持,您可以尝试使用COALESCE子句。
如果没有,我认为您将不得不在某些业务逻辑中构建您的JSON,在这种情况下,可以在3向连接中读取数据。您可以按用户ID进行排序,并根据用户记录是否存在将行数据创建或附加到JSON文档(如果按用户ID排序,则只需跟踪用户标识值何时更改)。
或者,您可以在一个查询中读取用户和单项数据列表,然后再次使用数据库获取重复数据。