Oracle SELECT WHERE值存在或不存在

时间:2011-10-15 19:17:35

标签: sql oracle select where

我有3张桌子; CASESUSERSUSER_META。对于此问题,您需要知道USER_META表有3列; user_idmeta_keymeta_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获取两个用户的结果?

谢谢,我希望这是有道理的。

2 个答案:

答案 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