一尘不染

从多个表中选择,产生巨大的结果

sql

我正在尝试从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语句中的所有匹配行。


阅读 119

收藏
2021-05-16

共1个答案

一尘不染

克里特纳(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两个不相关的查询来获得一个结果集。

2021-05-16