gpt4 book ai didi

mysql - 如何使 WHERE 子句仅适用于左联接中的右表?

转载 作者:可可西里 更新时间:2023-11-01 07:46:42 26 4
gpt4 key购买 nike

我有两个表。

TableA: field_definitions
field_id, field_type, field_length, field_name, field_desc, display_order, field_section, active

TableB: user_data
response_id, user_id, field_id, user_response

我需要一个查询,它将返回表 A 中的所有行,如果它们存在,则根据特定的 user_id 匹配表 B 中的行。

这是我目前所拥有的...

SELECT field_definitions. * , user_data.user_response
FROM field_definitions
LEFT JOIN user_data
USING ( field_id )
WHERE (
user_data.user_id =8
OR user_data.user_id IS NULL
)
AND field_definitions.field_section =1
AND field_definitions.active =1
ORDER BY display_order ASC

这仅适用于表 B 在 WHERE 子句中有零行或与 user_id 匹配的行。如果表 B 有匹配 field_id 但没有匹配 user_id 的行,我得到零返回行。

基本上,一旦表 B 中存在用户 X 的行,当搜索用户 Z 的响应时查询不再返回表 A 中的行,并且没有找到任何行。

我需要结果始终包含表 A 中的行,即使 B 中没有具有正确 user_id 的匹配行。

最佳答案

您可以将这些约束从 WHERE 子句移动到 ON 子句(这首先要求您将 USING 子句更改为 ON 子句:ON 子句比 USING 子句灵活得多)。所以:

SELECT field_definitions.*,
user_data.user_response
FROM field_definitions
LEFT
JOIN user_data
ON user_data.field_id = field_definitions.field_id
AND user_data.user_id = 8
WHERE field_definitions.field_section = 1
AND field_definitions.active = 1
ORDER
BY field_definitions.display_order ASC
;

关于mysql - 如何使 WHERE 子句仅适用于左联接中的右表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9883156/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com