2017-11-08 1 views
1

Ich habe zwei Tabellen. Ich brauche den kleinsten Wert der zweiten Tabelle innerhalb der ersten Tabelle. Ich möchte die Spalte least_t2 ausfüllen, wobei der Wert von table2 dem kleinsten Wert kommt.CASE WENN DANN Least Wert von anderen Tabelle

table1 
id name d1 d2 d3 
1 asd 1 2 3 
table2 
id name c1 c2 c3 c4 
1 poi 7 5 6 9 

Meine Ausgabetabelle wie unten aus table1

id name d1 d2 d3 least least_t2 
1 asd 1 2 3 1  b 

Meine Anfrage wil ist als:

select * , least(d1, d2, d3), 
    (CASE least(d1, d2, d3) 
     WHEN d1 THEN (CASE least(c1, c2, c3, c4) from `table2` 
           WHEN c1 THEN 'a' 
           WHEN c2 THEN 'b' 
           WHEN c3 THEN 'c' 
           WHEN c4 THEN 'd' 
         END) 
     WHEN d2 THEN (CASE least(c1, c2, c3, c4) from `table2` 
           WHEN c1 THEN 'a' 
           WHEN c2 THEN 'b' 
           WHEN c3 THEN 'c' 
           WHEN c4 THEN 'd' 
         END) 
     WHEN d3 THEN (CASE least(c1, c2, c3, c4) from `table2` 
           WHEN c1 THEN 'a' 
           WHEN c2 THEN 'b' 
           WHEN c3 THEN 'c' 
           WHEN c4 THEN 'd' 
         END) 

END) as least_t2 
FROM `table1` 

Mit der obigen Abfrage kein Ergebnis zeigt,.

Antwort

1

Diese Abfrage:

SELECT 
    t1.*, 
    LEAST(t1.d1, t1.d2, t1.d3) AS `least`, 
    CASE WHEN t2.c1 = LEAST(t2.c1, t2.c2, t2.c3, t2.cr) THEN 'a' 
     WHEN t2.c2 = LEAST(t2.c1, t2.c2, t2.c3, t2.cr) THEN 'b' 
     WHEN t2.c3 = LEAST(t2.c1, t2.c2, t2.c3, t2.cr) THEN 'c' 
     WHEN t2.c4 = LEAST(t2.c1, t2.c2, t2.c3, t2.cr) THEN 'd' 
     ELSE 'Unknown' END AS least_t2 
FROM table1 t1 
LEFT JOIN table2 t2 
    ON t1.id = t2.id 
1

Wenn table1 und table2 über die Spalte id verknüpft werden können, wird die folgende Abfrage durchgeführt.

select t1.*, 
     least(d1, d2, d3) as least, 
     case least(c1, c2, c3, c4) 
      when c1 then 'a' 
      when c2 then 'b' 
      when c3 then 'c' 
      when c1 then 'd' 
     end as least_t2 
from table1 t1 
inner join table2 t2 
on t1.id=t2.id 
1

Überprüfen Sie den folgenden Code, falls dies funktioniert.

select * , least(d1, d2, d3), 
    (CASE least(d1, d2, d3) 
     WHEN d1 THEN (select CASE least(c1, c2, c3, c4) 
           WHEN c1 THEN 'a' 
           WHEN c2 THEN 'b' 
           WHEN c3 THEN 'c' 
           WHEN c4 THEN 'd' 
         END from `table2`) 
     WHEN d2 THEN (select CASE least(c1, c2, c3, c4) 
           WHEN c1 THEN 'a' 
           WHEN c2 THEN 'b' 
           WHEN c3 THEN 'c' 
           WHEN c4 THEN 'd' 
         END from `table2`) 
     WHEN d3 THEN (select CASE least(c1, c2, c3, c4) 
           WHEN c1 THEN 'a' 
           WHEN c2 THEN 'b' 
           WHEN c3 THEN 'c' 
           WHEN c4 THEN 'd' 
         END from `table2`) 

END) as least_t2 
FROM `table1` 

oder

select * , least(d1, d2, d3),(select CASE least(c1, c2, c3, c4) WHEN c1 THEN 'a' WHEN c2 THEN 'b' WHEN c3 THEN 'c' WHEN c4 THEN 'd' END from `table2`) as least_t2 
FROM `table1` 
Verwandte Themen