请帮我理解为什么MySQL调用无效

时间:2011-01-27 23:37:16

标签: sql mysql

最终,我的最终目标是根据他/她的家乡状态向消费者提供可能的选择列表。我希望通过MySQL完全处理这个问题,因为我们正尽可能地创建一个真正动态的网站。如果成员的状态不是问题,则显示所有可用操作。如果成员处于“问题”状态,请不要显示该选项。

我将继续开始列出当前问题的示例表:

表-A

ID  |     Name        |   value
-------------------------------
1   |       f         |   5.99
2   |       g         |   4.25
3   |       h         |   3.99

表-B

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不起作用。

3 个答案:

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