2016-05-26 13 views
0

Ich habe 3 Tabellen: .Problem mit der richtigen Abfrage

tests: Enthält Spalten: ID , date , name of the test s.

cases: Jede Prüfung kann einige Fälle, also die Säulen sind: ID , Test_ID, QC number

names: QC-Nummern zu Namen übersetzt, so Tabellenspalten sind: QC number and QC name.

ich eine korrekte Abfrage erstellen möchten, denen Erhalte Zugriff auf alle Felder in der richtigen Weise, aber ich möchte, dass die Ergebnisse keine Duplikate anzeigen.

zum Beispiel:

Tests:

ID date  name 

1 1.1.16 test 1 

2 2.2.16 test 2 

Fälle:

ID Test_ID QC_NUM 

1 1   QC-1234 

2 1   QC-6789 

3 1   QC-0003 

Namen:

QC_NUM QC_NAME 

QC-1234 stresss 

QC-6789 ping 

QC-0003 pong 

Wenn ich für alle Tests suchen, diehat 0 Fälle - Ich möchte nur die richtige Zeile in "Tests" -Tabelle erhalten.

Wenn ich nach allen Tests suche, die "Ping" -Test haben - möchte ich nur die richtige Zeile in "Tests" -Tabelle bekommen.

Ich hoffe, dass ich klar genug war ..

EDIT: hier ist ein Beispiel: http://sqlfiddle.com/#!9/f2884/4

Wie Sie sehen das Problem, wenn versucht wird, die Daten zu erhalten, wenn es keine Bedingungen sind - dann Ich erhalte Duplikate.

+0

Was hast du es bisher versucht? Bitte fügen Sie die SQL CREATE-Anweisungen für Ihre Tabellen und die SELECT-Anweisung, die Sie bisher haben, ein. –

Antwort

0

folgenden Abfragen sollte alles in Ordnung sein:

select distinct t.* 
from tests t, cases c, names n 
where t.ID = c.Test_ID 
and c.QC_NUM = n.QC_NUM 
and c.QC_NUM = 'QC-1234' 

select distinct t.* 
from tests t, cases c, names n 
where t.ID = c.Test_ID 
and c.QC_NUM = n.QC_NUM 
and n.QC_NAME = 'ping' 

Wenn Sie die Join-Anweisung in Ihren Abfragen verwenden möchten, die ANSI-Standard ist, können Sie auch versuchen, die folgenden:

select distinct t.* 
from tests t 
join cases c 
on t.ID = c.Test_ID 
join names n 
on c.QC_NUM = n.QC_NUM 
where c.QC_NUM = 'QC-1234' 

select distinct t.* 
from tests t 
join cases c 
on t.ID = c.Test_ID 
join names n 
on c.QC_NUM = n.QC_NUM 
where c.QC_NAME = 'ping' 
+0

Kann auch versuchen? Beide Abfragen sind genau die gleichen, die zweite ist die einzige Möglichkeit, sie zu schreiben. – sagi

+0

@sagi Die zweite Abfrage ist ANSI-Standard SQL. – tale852150

+0

@ tale852150 Ok, und? – sagi