我有一个很长的查询,就像
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不工作。 有什么想法吗?
答案 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)