2016-07-07 11 views
0

Ich habe diesen grundlegenden SQL-Satz:MySQL Spalt mit bedingtem Wert

SELECT p.s1,pr.s1 FROM `prop` p LEFT OUTER JOIN prom pr ON pr.id = p.prom 

Meine Absicht ist es, eine Spalte mit dem Wert von pr.s1 zu haben, wenn es nicht null ist, und p.s1 in anderen Fällen. Es ist sehr einfach, aber ich weiß nicht, wie man es richtig macht.

Jede Idee wird sehr geschätzt werden, danke.

Antwort

2

können Sie IFNULL verwenden:

SELECT IFNULL(pr.s1, p.s1) AS s1 
FROM `prop` p 
LEFT OUTER JOIN prom pr 
    ON pr.id = p.prom 
+0

so schnell antwortet, danke! –

+0

es ist eine einfache Änderung –

1

können Sie verwenden IFNULL

SELECT p.s1, ifnull(pr.s1, p.s1) 
FROM `prop` p 
LEFT OUTER JOIN prom pr ON pr.id = p.prom 
+0

So schnell Antworten, danke! –

1

können Sie verwenden COALESCE():

SELECT p.s1,COALESCE(pr.s1,p.s1) 
FROM `prop` p 
LEFT OUTER JOIN prom pr 
ON pr.id = p.prom 

Obwohl Sie zwei identische Spalten haben kann, so dass ich denke, Sie meinten:

SELECT COALESCE(pr.s1,p.s1) as s1 
FROM ... 
+1

So schnell antwortet, danke! –

2

Dinge Zur Abrundung, Sie auch COALESCE verwenden:

SELECT COALESCE(pr.s1, p.s1) 
FROM prop p 
LEFT OUTER JOIN prom pr 
    ON pr.id = p.prom 

Eine nette Sache über die Verwendung von COALESCE() über IFNULL() ist, dass erstere mehr als zwei Parameter übernehmen kann. Wenn also zum Beispiel zwei im Falle eines NULL Wert Backup Säulen hatten könnten Sie tun:

SELECT COALESCE(pr.s1, p.s1, p.someOtherCol) 
+1

Danke für Ihre Erklärung! –