【发布时间】:2015-10-01 08:48:26
【问题描述】:
我需要选择所有仅在他们自己的星球上战斗过的士兵,我不知道如何才能做到。
这是我尝试过的。
SELECT id_soldier, name
FROM soldier, battle_log, battle
WHERE IN(...soldier.planet_id = battle.id_planet_battle...)
【问题讨论】:
我需要选择所有仅在他们自己的星球上战斗过的士兵,我不知道如何才能做到。
这是我尝试过的。
SELECT id_soldier, name
FROM soldier, battle_log, battle
WHERE IN(...soldier.planet_id = battle.id_planet_battle...)
【问题讨论】:
由于我无法访问数据库,因此无法对其进行测试,但您可以尝试一下吗?
SELECT id_soldier, name
FROM soldier s
LEFT JOIN battle_log l ON s.id_soldier = l.soldier_id
LEFT JOIN battle b ON l.battle_id = b.id_battle
WHERE s.planet_id = b.id_planet_battle
如果它返回错误,请告诉我,我们会尝试修复它。
【讨论】:
您可以使用not exists 运算符排除参加过其他星球战斗的士兵:
SELECT *
FROM soldier s
WHERE NOT EXISTS (SELECT *
FROM battle b
JOIN battle_log bl ON b.id_battle = bl.battle_id
WHERE bl.soldier_id = s.id_soldier AND
b.id_planet_battle != s.planet_id)
【讨论】: