【问题标题】:SQL Result varies when changing "select" statement更改“选择”语句时 SQL 结果会有所不同
【发布时间】: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 语句之间的另一个线程删除。这是无法复制的。

标签: mysql sql xampp


【解决方案1】:

首先你指出这是 MySQL,它在历史上以没有出色的查询优化而闻名,所以让我们给它一个更清晰的语法来理解。我怀疑连接中的 != 正在抛弃 MySQL。更改您的查询,以便加入公共字段并在 != 字段上过滤(即 where):

select p1.vorname, p1.Geburtstag
    from patienten as p1
    inner join patienten as p2 
        on p1.Geburtstag = p2.Geburtstag 
    where p1.Nr != p2.Nr
    order by p1.Geburtstag asc

HTH, 肖恩

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-23
    • 2019-03-21
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多