这是关于战舰及其战斗的模式:
Ships(name, yearLaunched, country, numGuns, gunSize, displacement)
Battles(ship, battleName, result)
典型的Ships元组将是:
('New Jersey', 1943, 'USA', 9, 16, 46000)
这意味着战舰新泽西州于1943年发射;它属于美国,装有9门16英寸(枪管或枪管内径)的枪,加重(以航空方式移位)46,000吨。战斗的典型元组是:
('Hood', 'North Atlantic', 'sunk')
列出在战斗中互相争斗的所有国家对。仅列出每对一次,并将其列为首先按字母顺序排在第一位的国家/地区。
目前,我有这个用于实现,但它打印出所有匹配而不是正确的结果。
SELECT a.country, b.country
FROM ships a, ships b, battles b1, battles b2
WHERE a.name=b1.ship and b1.battleName=b2.battleName
AND a.country>b.country
答案 0 :(得分:0)
显式连接是首选。
尝试使用DISTINCT
删除重复项,并且不要忘记ORDER
它们。
在这里,我们假设每场战争中只有两个国家(他们互相争斗)。
SELECT DISTINCT s1.country, s2.country
FROM battles b1
JOIN ships s1
ON s1.name = b1.ship
JOIN battles b2
ON b2.battlename = b1.battlename
JOIN ships s2
ON s2.name = b2.ship
WHERE s1.country > s2.country
ORDER BY s1.country, s2.country