【发布时间】:2013-12-11 22:33:18
【问题描述】:
我正在尝试在 MySQL 中编写一个查询来获取图像列表。问题是,我只想在列不为空时加入另一个表。
图片:
|id|image |user_id|circle_id|is_deleted|
------------------------------------------------------------------------------------------------------
|1 |cdb10bee27262c597619fdef25bae0eb673f5d5d1b9b33697e40906ad851a25b.jpg|30 |1 |0 |
|2 |9e3213276225b900a3e19262a7761ec3fdf608b95441aa8fbc012f246514d394.jpg|30 |1 |0 |
|3 |a51e104c82de33a804ae0a09e719f3cd7aa205a0830eab4e1e4aa26fd8a6313d.jpg|30 |NULL |0 |
circles_users:
|id|circle_id|user_id|
----------------------
|1 |1 |31 |
用户:
|id|username|
-------------
|30|elk |
|31|moose |
最初,我想出了这个,但经过检查,我意识到它不起作用。
SELECT images.*
FROM images
LEFT JOIN circles_users ON circles_users.circle_id = images.circle_id
WHERE (circles_users.user_id = '31' OR images.circle_id IS NULL)
AND images.user_id = '30'
AND images.is_deleted = '0'
LIMIT 16
我似乎无法正确理解,所以我决定编写一些 pseudo sql 来说明我希望实现的目标
SELECT images.*
FROM images
CASE
WHEN images.circle_id IS NOT NULL
THEN LEFT JOIN circles_users ON circles_users.circle_id = images.circle_id AND circles_users.user_id = '32'
END CASE
WHERE images.user_id = '30'
AND images.is_deleted = '0'
LIMIT 16
希望你明白我的意思。感谢您的帮助。
基本上,如果另一个用户在发布者共享的圈子中或者如果 circle_id 为空,我想获取用户(发布者)发布的所有图像
【问题讨论】:
-
我不明白这个问题
-
如果您不希望结果中出现 NULL,请尝试将 LEFT JOIN 更改为 INNER JOIN。
-
我认为一些示例数据和预期输出会有所帮助。
-
@GarethD 希望现在有意义
-
实际上,我正在检查 31 岁的用户圈子。我太笨了我的原始查询按预期工作。我工作了很长时间,我开始测试错误的数据。非常感谢您的努力和时间。我非常感谢。
标签: mysql sql join conditional