我有3张桌子; CASES
,USERS
和USER_META
。对于此问题,您需要知道USER_META
表有3列; user_id
,meta_key
和meta_value
每个用户都与许多CASES
相关联,而每个USER
都与许多USER_META
我当前的查询是这样的
SELECT CASES.*, USERS.*, USER_META.*
FROM CASES
JOIN USERS ON USERS."user_id" = CASES."user_id"
JOIN USER_META ON USER_META_"user_id" = USERS."user_id"
这种方法的问题是每个USER都有 A LOT 的USER_META,所以我的结果集有太多行。如何重写此查询,以便我只能选择USER_META,其中USER_META。“meta_key”等于某个值但如果他们没有此USER_META仍然会得到结果。“meta_key”设置
例如:
SELECT CASES.*, USERS.*, USER_META.*
FROM CASES
JOIN USERS ON USERS."user_id" = CASES."user_id"
JOIN USER_META ON USER_META_"user_id" = USERS."user_id"
WHERE USER_META."meta_key" = 'my_key'
这样可以很好地工作,但并非所有用户在“meta_key”列中都有“my_key”值,我们仍然需要查看他们的CASE。对于没有“meta_key”的用户,结果应该只返回CASE和USER列。
如何重写此查询,以便使用此meta_key获取两个用户的结果?
谢谢,我希望这是有道理的。
答案 0 :(得分:4)
我会使用LEFT JOIN
SELECT CASES.*, USERS.*, USER_META.*
FROM CASES
JOIN USERS ON USERS."user_id" = CASES."user_id"
LEFT JOIN USER_META ON USER_META."user_id" = USERS."user_id" AND USER_META."meta_key" = ?
答案 1 :(得分:1)
您需要对可能没有结果的表使用OUTER JOIN。在Oracle中,在此表的连接句子的字段名称附近使用(+)。此链接可以为您提供帮助:http://download.oracle.com/docs/cd/B28359_01/server.111/b28286/queries006.htm