Mysql查询:连接
我有以下表格: 传输表:Mysql查询:连接,mysql,Mysql,我有以下表格: 传输表: ID | storagefrom | storageto 1 | 2 | 3 存储表: ID | Name 2 | Kitchen 3 | Main 我希望得到以下结果: Storage1 | Storage2 Kitchen | Main 这是我的疑问: SELECT storages.name as Storage1, storages.name as Storage2 FROM transfers LEFT JOIN st
ID | storagefrom | storageto
1 | 2 | 3
存储表:
ID | Name
2 | Kitchen
3 | Main
我希望得到以下结果:
Storage1 | Storage2
Kitchen | Main
这是我的疑问:
SELECT storages.name as Storage1, storages.name as Storage2
FROM transfers
LEFT JOIN storages ON storages.id = transfers.storagefrom
LEFT JOIN storages ON storages.id = transfers.storageto
有什么提示吗?只需将条件聚合与
大小写表达式和1连接一起使用即可:
SELECT t.id,
MAX(CASE WHEN s.id = t.storagefrom THEN s.name END) as storage_1,
MAX(CASE WHEN s.id = t.storageto THEN s.name END) as storage_2
FROM transfer t
LEFT JOIN storages s
ON(s.id IN(t.storagefrom,t.storageto))
GROUP BY t.id
如果它只有一条记录,而您不关心transfer.id
,请将其从选择列表中删除,并删除GROUP BY
子句。只需为您的表添加别名即可
SELECT s1.name as Storage1, s2.name as Storage2
FROM transfers
LEFT JOIN storages AS s1 ON s1.id = transfers.storagefrom
LEFT JOIN storages AS s2 ON s2.id = transfers.storageto
试一试
参考:
也许这会对你有所帮助:
SELECT T.ID,
S1.Name Storage1,
S2.name Storage2
FROM transfers T
LEFT JOIN storages S1 ON S1.ID = T.storagefrom
LEFT JOIN storages S2 ON S2.ID = T.storageto