Actualmente estoy atascado en descubrir qué podría considerarse un problema de unión interna bastante básico y común:

Tengo dos mesas de pedidos y ubicaciones:

pedidos

|----------------------|-------------------|-------------------|
| foreign_from_id      | foreign_to_id     |    same_triade    |
|----------------------|-------------------|-------------------|
|          US          |        MX         |                   |
|          US          |        DE         |                   |
|----------------------|-------------------|-------------------|

ubicaciones

|----------------------|-------------------|
|       foreign_id     |       triade      |
|----------------------|-------------------|
|          US          |         AME       |
|          MX          |         AME       |
|          DE          |         EU        |
|----------------------|-------------------|

Se supone que mi código verificará si Foreign_from_id y Foreign_to_id están en la misma tríada y devuelven un 1 o 0 en same_triade. Ayudarme a resolver esto me ayudaría a resolver muchos de mis problemas de SQL.

¡Gracias de antemano!

1
anthony 4 dic. 2019 a las 17:30

2 respuestas

La mejor respuesta

A partir de la consulta de @ PeterHe, escribí esto:

UPDATE orders
INNER JOIN locations fl ON orders.foreign_from_id=fl.foreign_id 
INNER JOIN locations tl ON orders.foreign_to_id=tl.foreign_id 
SET orders.same_triade = (CASE WHEN fl.triade=tl.triade THEN 1 ELSE 0 END)

Demo

1
Alberto Moro 5 dic. 2019 a las 09:17

Esto debería funcionar:

SELECT o.foreign_from_id, o.foreign_to_id, CASE WHEN fl.triade=ol.triade THEN 1 ELSE 0 END AS same_triade
FROM orders o
INNER JOIN locations fl
ON o.foreign_from_id=fl.foreign_id 
INNER JOIN locations tl
ON o.foreign_to_id=tl.foreign_id;
1
PeterHe 4 dic. 2019 a las 16:36