2017-07-14 60 views
4

因此,當前我們正在執行SQL @ our School和 我在更改選擇參數時想知道可疑結果集。更改「select」語句時SQL結果會有所不同

所以,當我試試這個:

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: [email protected] 
Server-Zeichensatz: UTF-8 Unicode (utf8) 
+0

而不是說你所做的一切是改變select語句它會更準確,而且要說你所做的只是改變選定字段的列表。另外,你應該避免使用不同的縮進,以便更容易地看到其餘的東西是相同的。 –

+2

所以:我不相信改變所選字段的列表會產生不同的結果。你能證明這個嗎?請提供[MCVE]。這將意味着'CREATE TABLE'語句和'INSERT INTO'語句用示例數據填充表,以便執行上述兩個查詢可以得到您聲稱它們產生的結果。 –

+1

這裏一定有其他事情發生。查詢返回的行數只與使用'SELECT DISTINCT'時選擇的列有關。在查詢中情況並非如此,所以返回的行數必須保持不變。 –

回答

0

首先,你表示這是MySQL的這是歷史上著名的沒有恆星的查詢優化,所以讓我們給它一個更清晰的語法來理解。我懷疑連接中的!=會拋出MySQL。更改您的查詢,以便您在公共領域的參與和過濾(即在哪裏)在=字段:

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, 肖恩