我正在尝试从2个表中选择项目,它应该返回2个结果,但是我得到的结果超过了1000:
$sqlH = 'SELECT * FROM sheikh_tbl, wall'; $sqlH .= ' WHERE shk_fname LIKE "%'.$keyword.'%"'; $sqlH .= ' OR shk_mname LIKE "%'.$keyword.'%"'; $sqlH .= ' OR shk_lname LIKE "%'.$keyword.'%"'; $sqlH .= ' OR (srub = "Sawtiyat" AND wtitle LIKE "%'.$keyword.'%")';
感谢您向我解释查询问题
编辑:使用UNION ALL代替UNION
UNION的默认行为是从结果中删除重复的行。可选的DISTINCT关键字除了默认关键字外没有其他作用,因为它还指定了重复行删除。使用可选的ALL关键字,不会发生重复行删除,并且结果包括所有SELECT语句中的所有匹配行。
克里特纳(Kritner)提供了一个答案,我只是想澄清一下您的理解:
不建议使用逗号分隔的表列表的联接语法,当不使用联接条件来过滤联接时,将获得交叉联接/笛卡尔乘积:
表格1:
ID 1 2 3
表2:
ID 4 5 6
所以这个查询:
SELECT * FROM Table1,Table2
返回值:
1,4 1,5 1,6 2,4 2,5 2,6 3,4 3,5 3,6
由于您的WHERE条件是OR语句列表,因此,由于至少有一个条件与每个表中的一条记录匹配,因此您可以取回所有记录。您或者需要使用适当的联接,或者如Kritner建议的那样,使用UNION两个不相关的查询来获得一个结果集。
WHERE
OR
UNION