MySQL 连接查询 - 或者被忽略

标签 mysql join

当您独自工作并且迷失在自己的头脑中时,偶尔会遇到这些恼人的问题!我完全希望答案很简单:

我有这样的查询:

SELECT * FROM table_a
LEFT JOIN table_b ON table_a.order_id = table_b.order_id
WHERE (table_a.column_a='string' OR table_b.column_b='string' OR table_b.column_c='string')
group by column_d

查询正在返回所有行,并且似乎忽略了查询的 WHERE 部分……但事实并非如此。如果我删除 OR 部分,它会按预期工作:

SELECT * FROM table_a
LEFT JOIN table_b ON table_a.order_id = table_b.order_id
WHERE (table_a.column_a='string')
group by column_d

想法/明显的问题?

更新

我的具体问题是我正在根据整数列评估字符串,这意味着该语句评估为未知。代码现在如上,但如果字符串是数字,我只添加特定的 OR

最佳答案

通过观察您的加入,我猜想您正在比较的某些列可以为空,并且相位返回结果为 true 的行(请注意,在相位为空值的位置进行比较的列导致 UNKNOWN 。没有,没有被返回。您可以通过添加一个条件来解决这个问题,该条件将检查值是否不为 Null)

SELECT * FROM table_a
LEFT JOIN table_b ON table_a.order_id = table_b.order_id
WHERE ((table_a.column_a IS NOT NULL AND table_a.column_a='string') OR (table_b.column_b IS NOT NULL AND table_b.column_b='string') OR (table_b.column_c IS NOT NULL AND table_b.column_c='string'))
GROUP BY column_d

关于MySQL 连接查询 - 或者被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10847673/

相关文章:

php - MySQL 插入错误

mysql - SQL - 有没有办法计算一系列日期的总计?

mysql - 使用 where 条件按连接表中最近的日期排序 - MySQL

mysql - 如何在数据库字段中按升序对内容进行排序(SQL)

mysql - 删除特定行后重新排列自动递增的行 -

sql - 在 SELECT 子句中使用子查询过滤表与使用 where 子句过滤

mysql - 将 WHERE 子句与 NATURAL JOIN SQL 结合使用?

mysql - 连接查询返回重复行

mysql - 使用 Mysql/Ajax 使用输入字段中的值填充表单

java - 将 sql 中的多个列映射到 java 对象