2017-11-01 3 views
-1

Ich habe diese Anfrage:MySQL Query LEFT OUTER JOIN UND IFNULL

SELECT st.st_id, st.id, st.name, at.status, at.date 
FROM st,at 
WHERE st.st_id = at.at_id; 

aber ich möchte das Ergebnis alle st Tisch zurückkehren, wenn st .st_id in at .st_id vorhanden sind, die Statusspalte ist das, was in der at Tabelle, wenn nicht der Status ist "H", kann jemand helfen? this is my table column

+0

Was für 'st' Tabelle in' at' Tabelle 'at_id' oder' st_id' den Fremdschlüssel ist ? Ich stelle dir diese Frage, weil ich nicht verstehe, warum du 'WHERE st.st_id = at.at_id;' –

+0

Hi sagst. Bitte: Lesen Sie über den Formatierungscode. [Text, keine Links/Bilder, für Text] (https://meta.stackoverflow.com/a/285557/3404097). Bitte lesen und handeln Sie auf [mcve]. Dies ist eine FAQ und einfach. Googeln Sie immer viele klare, prägnante spezifische Phrasierungen Ihrer Frage/Ihres Problems/Ziels ohne Ihre anwendungsspezifischen Namen und lesen Sie viele Treffer; Wenn Sie keine Antwort finden, verwenden Sie eine Formulierung als Titel. Lesen und handeln Sie [fragen]. – philipxy

+0

@PierreRobentzCassion Man muss keine FKs oder andere Einschränkungen zur Abfrage wissen. Hier können wir einfach akzeptieren, dass sie Status haben wollen, wenn st.st_id = at.at_id. Es spielt keine Rolle, ob zwischen diesen Spalten oder anderen Spalten ein FK sein kann oder wird. (Ein FK könnte deklariert werden, wenn die referenzierte Tabelle ein PK oder UNIQUE NOT NULL ist und die referenzierten Spaltenwerte alle darin enthalten sind.) – philipxy

Antwort

0

/Verwenden IFNULL wenn DB MYSQL ist/

SELECT st.st_id, st.id, st.name, IFNULL(at.status,'H') as status, at.date 
FROM st LEFT JOIN 
    at 
    ON st.st_id = at.at_id; 
0

Nie Kommas in der FROM Klausel. Immer verwenden Sie die richtige, explizite JOIN Syntax. Dann wäre es einfacher, die Abfrage zu schreiben:

SELECT st.st_id, st.id, st.name, COALESCE(at.status, 'H') as status, at.date 
FROM st LEFT JOIN 
    at 
    ON st.st_id = at.at_id; 
0

Zunächst lassen Sie mich versuchen zu verstehen, was Sie Ihre Abfrage zu tun:

  1. Die Abfrage muss alle st wo st.st_id = at.at_id
  2. Wenn st.st_id = at.st_id dann at.status = status sonst status='H'

Das Skript, das ich vorschlagen:

SELECT st.st_id, st.id, st.name, IF(st.st_id = at.st_id, at.status, 'H') AS status, at.date FROM st LEFT JOIN at ON st.st_id = at.at_id;

0
SELECT st.st_id, 
      st.id, 
      st.name, 
      st.cl_id, 
      st.gender, 
      CASE WHEN ISNULL(at.st_id) THEN 'H' ELSE at.status 
    FROM `st` 
    LEFT JOIN `at` ON `st`.`st_id` = `at`.`st_id`