我的MYSQL功夫很弱,需要一些指导,这是我的2个表:
TABLE SHIPS
id | ship_name
1 recon ship
2 light fighter
3 heavy fighter
4 light cruiser
TABLE FLEET
user_id | ship_id | amt
173 1 3
173 2 4
173 3 1
173 4 0
169 1 5
169 2 2
169 3 0
169 4 0
对于我的输出,我试图获取这样的数据:
ship_name | amt1 | amt2
recon ship 3 5
light fighter 4 2
heavy fighter 1 0
其中 amt1 是用户 173 的金额,amt2 是用户 169 的金额。我希望我已经说清楚了,谢谢!
编辑:我又添加了一艘船,并且两个用户都为该船设置了 amt=0 的情况,我怎么能从结果中忽略这种情况,我在 WHERE 子句中尝试过,但它一直告诉我我有一个错误
最佳答案
根据您的问题,这将满足您的基本需求。
SELECT a.ship_name,
MAX(CASE WHEN b.user_ID = 173 THEN amt END) amt1,
MAX(CASE WHEN b.user_ID = 169 THEN amt END) amt2
FROM Ships a
INNER JOIN Fleet b
ON a.id = b.ship_ID AND
b.user_ID IN (173, 169)
GROUP BY a.ship_name
如果您想返回所有 user_ID
而不在语句中指定任何值,那么动态 SQL 是首选。
更新 1
添加HAVING
子句,
SELECT ...
FROM ...
GROUP BY ....
HAVING MAX(CASE WHEN b.user_ID = 173 THEN amt END) <> 0 AND
MAX(CASE WHEN b.user_ID = 169 THEN amt END) <> 0
关于MYSQL查询同一个字段两个不同的id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15985391/