Oracle SELECT WHERE 值存在或不存在

发布于 2024-12-09 18:49:09 字数 1059 浏览 0 评论 0原文

我有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_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 列。

我如何重写此查询,以便它为使用此元密钥和不使用此元密钥的用户获取结果?

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

I have 3 tables; CASES, USERS and USER_META. For this issue you need to know that the USER_META table has 3 columns; user_id, meta_key and meta_value

Each user is associated with many CASES and each USER is associated with many USER_META

My current query is like this

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"

The problem with this approach is that each USER has A LOT of USER_META so my result set has too many rows. How can I rewrite this query so that I can select only the USER_META where the USER_META."meta_key" is equal to a certain value yet still get the result if they do not have this USER_META."meta_key" set yet

For example:

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'

This would work great but not all users have a value of "my_key" in the "meta_key" column and we still need to view their CASE. For users that do not have the "meta_key" the result should just return the CASE and USER columns.

How can I rewrite this query so it gets the result for both users with this meta_key and without?

Thanks, I hope this makes sense.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

时光匆匆的小流年 2024-12-16 18:49:09

我会使用 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" = ?

I would use a 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" = ?
烟凡古楼 2024-12-16 18:49:09

您需要对可能没有结果的表使用 OUTER JOIN。在 Oracle 中,在与该表的连接语句的字段名称附近使用 (+)。此链接可能对您有帮助: http://download.oracle .com/docs/cd/B28359_01/server.111/b28286/queries006.htm

you need to use OUTER JOIN with the table that may have no results. In Oracle, use (+) near to the field name of the join sentence with this table. This link may help you: http://download.oracle.com/docs/cd/B28359_01/server.111/b28286/queries006.htm

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文