2017-07-14 10 views
4

現在、私たちはSQL @ our Schoolを行っています。 selectパラメータを変更すると疑わしい結果セットが出るのではないかと思いました。"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

So:選択したフィールドのリストを変更すると結果が異なるとは思わない。証明できますか? [MCVE]を入力してください。これは 'CREATE TABLE'ステートメントと' INSERT INTO'ステートメントを使ってテーブルにサンプルデータを取り込むことを意味します。したがって、上記の2つのクエリを実行すると、あなたが得た結果を得ることができます。 –

+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、 ショーン

関連する問題