【发布时间】:2017-12-19 09:58:49
【问题描述】:
所以目前我们正在做 SQL @ our School 和 更改选择参数时,我想知道一个可疑的结果集。
所以当我尝试这个时:
select p1.vorname, p1.Geburtstag, p2.vorname, p2.Geburtstag
from patienten as p1
inner join patienten as p2
on p1.Geburtstag = p2.Geburtstag AND p1.Nr != p2.Nr
order by p1.Geburtstag asc
然后我得到 44 个结果。但是当我尝试这个时:
select p1.vorname, p1.Geburtstag
from patienten as p1
inner join patienten as p2
on p1.Geburtstag = p2.Geburtstag AND p1.Nr != p2.Nr
order by p1.Geburtstag asc
我得到 1084 个结果,代表所有患者...
我想知道为什么,因为我所做的只是更改 select 语句...
我正在使用 XAMPP:
Server: 127.0.0.1 via TCP/IP
Server-Typ: MariaDB
Server-Version: 10.1.8-MariaDB-log - mariadb.org binary distribution
Protokoll-Version: 10
Benutzer: root@localhost
Server-Zeichensatz: UTF-8 Unicode (utf8)
【问题讨论】:
-
与其说您所做的只是更改选择语句,不如说您所做的只是更改所选字段的列表会更准确。此外,您应该避免使用不同的缩进,以便更容易看到其余的东西是相同的。
-
所以:我不相信更改选定字段的列表会产生不同的结果。你能证明这个吗?请提供minimal reproducible example。这意味着
CREATE TABLE语句和INSERT INTO语句用示例数据填充表,以便可以观察到执行上述两个查询会产生您声称它们产生的结果。 -
这里肯定发生了其他事情。查询返回的行数仅取决于使用
SELECT DISTINCT时选择的列。在您的查询中并非如此,因此返回的行数必须保持不变。 -
正如@MikeNakis 所说,请尝试再次运行这两个查询。也许您不小心更改了其他内容,或者数据在执行之间发生了更改?您如何调用查询以及在哪里看到结果?
-
我投票决定将此问题作为题外话结束,因为缺少信息或 OP 出错或数据被 SELECT 语句之间的另一个线程删除。这是无法复制的。