FROM语句使我的查询返回一个空列表

时间:2014-03-23 16:30:42

标签: mysql sql

我有一个很长的查询,就像

SELECT A.* FROM A, B, C, D, E 
WHERE A.attr1 LIKE "%hello%"
OR A.attr2 LIKE "%hello%"
OR (statement_that_uses_B_table)
OR (statement_that_uses_C_table)

通常第一个语句是匹配的(A.attr1 =" hello"),但其他语句不是这样的,我有一个类似"的查询。 ...在哪里1或0或0或0或0"。但是我的查询根本没有返回任何内容。 奇怪的是,如果我删除所有" OR"使用其他表格,如

SELECT A.* FROM A
WHERE A.attr1 LIKE "%hello%"
OR A.attr2 LIKE "%hello%"

工作正常。 甚至更奇怪,

SELECT A.* FROM A, B, C, D, E 
WHERE A.attr1 LIKE "%hello%"
OR A.attr2 LIKE "%hello%"

Doest不工作​​。 有什么想法吗?

1 个答案:

答案 0 :(得分:2)

像这样的笛卡尔连接的唯一方法是什么,如果其中一个表是空的,那么B,C,D或E必须没有任何行。

mysql> select * from t;
+----+------+
| id | data |
+----+------+
|  5 |  778 |
|  1 |  122 |
|  3 |  277 |
|  2 |   20 |
|  4 | 3661 |
+----+------+

mysql> select * from d;
Empty set (0.00 sec)

mysql> select * from t,d;
Empty set (0.00 sec)

mysql> insert into d set id = 5;
Query OK, 1 row affected (0.00 sec)

mysql> select * from t,d;
+----+------+------+
| id | data | id   |
+----+------+------+
|  5 |  778 |    5 |
|  1 |  122 |    5 |
|  3 |  277 |    5 |
|  2 |   20 |    5 |
|  4 | 3661 |    5 |
+----+------+------+
5 rows in set (0.00 sec)

即使没有匹配的字词,LEFT JOIN也会加入数据。考虑:

 select * from t left join d on 1;
+----+------+------+
| id | data | id   |
+----+------+------+
|  5 |  778 | NULL |
|  1 |  122 | NULL |
|  3 |  277 | NULL |
|  2 |   20 | NULL |
|  4 | 3661 | NULL |
+----+------+------+
5 rows in set (0.00 sec)