用于比较表中两个值的简单内部联接

Simple Inner Join for comparing two values in table

提问人:anthony 提问时间:12/4/2019 更新时间:12/5/2019 访问量:876

问:

我目前被困在弄清楚什么可以被认为是一个相当基本和常见的内部连接问题:

我有两张桌子的订单和位置:

订单

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

地点

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

我的代码应该检查foreign_from_id和foreign_to_id是否在同一个三元组中,并在same_triade中返回 1 或 0。 帮助我弄清楚这个问题将帮助我解决很多 SQL 问题。

提前致谢!

MySQL 连接 比较

评论

1赞 Strawberry 12/4/2019
请参见:为什么我应该为在我看来非常简单的 SQL 查询提供 MCRE?
0赞 anthony 12/4/2019
我试图自己解决它,但我正在挣扎。我认为对于有 mysql 经验的人来说,这是不费吹灰之力的......
0赞 Strawberry 12/4/2019
我希望你是对的。

答:

1赞 PeterHe 12/5/2019 #1

这应该有效:

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赞 Alberto Moro 12/5/2019 #2

从@PeterHe的查询开始,我写了这样:

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)

演示