最终,我的最终目标是根据他/她的家乡状态向消费者提供可能的选择列表。我希望通过MySQL完全处理这个问题,因为我们正尽可能地创建一个真正动态的网站。如果成员的状态不是问题,则显示所有可用操作。如果成员处于“问题”状态,请不要显示该选项。
我将继续开始列出当前问题的示例表:
ID | Name | value
-------------------------------
1 | f | 5.99
2 | g | 4.25
3 | h | 3.99
ID | state
---------------
2 | NC
对于来自亚利桑那州的消费者,他的结果会显示:
1 - f - 5.99
2 - g - 4.25
3 - h - 3.99
而来自北卡罗来纳州(北卡罗来纳州)则是:
1 - f - 5.99
3 - h - 3.99
因为选项2对他/她无效。
我相信问题可以通过WHERE NOT EXIST来解决,但我更倾向于加入来实现目标。
我的初步查询是:
SELECT a.name, a.value FROM Table_A a
JOIN Table_B b ON a.ID = b.ID WHERE
b.state != 'NC'
这不起作用
我想我也可以把WHERE语句放在ON子句中:
SELECT a.name, a.value FROM Table_A a
JOIN Table_B b ON (a.ID = b.ID AND b.state!='NC')
但这也不起作用。
虽然我很高兴达到目标,但更重要的是要理解为什么我提到的JOIN不起作用。
答案 0 :(得分:2)
这可能更清洁一点:
SELECT
a.name,
a.value
FROM Table_A a
LEFT OUTER JOIN Table_B b ON a.ID = b.ID AND b.state = 'NC'
WHERE b.ID is null
答案 1 :(得分:1)
试试这个:
SELECT * FROM Table_A a
LEFT OUTER JOIN (SELECT * FROM Table_B WHERE state = 'NC') b ON a.id = b.id
WHERE b.state IS NULL
我目前无法访问我的MySQL盒子,所以我无法测试它,但我认为它会起作用。如果没有,我会在大约30分钟后回家时进行测试。
答案 2 :(得分:1)
1-你应该LEFT JOIN获取table_a的所有结果table_b.id = table_a.id或table_b.id为null 2-为了排除“问题”状态,只从未设置状态的连接中选择,或者设置为与用户不同的状态
所以查询是:
SELECT a.name, a.value FROM Table_A a LEFT JOIN Table_B b ON a.ID = b.ID WHERE b.state is null OR b.state != '$user_state';