首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >战斗,船只sql查询

战斗,船只sql查询
EN

Stack Overflow用户
提问于 2013-10-03 22:28:14
回答 3查看 3.6K关注 0票数 2

下面是一个关于战列舰及其战斗的模式:

代码语言:javascript
复制
 Ships(name, yearLaunched, country, numGuns, gunSize, displacement)
 Battles(ship, battleName, result)

典型的船舶元组是:

代码语言:javascript
复制
 ('New Jersey', 1943, 'USA', 9, 16, 46000)

这意味着新泽西号战舰是1943年发射的;它属于美国,携带9支16英寸口径(内径或内径的枪管)枪支,重量46,000吨。一个典型的战斗元组是:

代码语言:javascript
复制
 ('Hood', 'North Atlantic', 'sunk')

也就是说,HM.S.胡德号在北大西洋战役中沉没了。其他可能的结果是“ok”和“损坏”。

问题:列出所有在战斗中互相战斗的国家。每对只列出一次,然后按照字母顺序列出第一位的国家。

答:我写了这个:

代码语言:javascript
复制
SELECT 
    a.country, b.country 
FROM 
    ships a, ships b, battles b1, battles b2 
WHERE 
    name = ship 
    and b1.battleName = b2.battleName 
    and a.country > b.country

但上面写着不明确的列名。我该怎么解决呢?提前感谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-03 22:40:17

name = ship才是问题所在。name可能来自abship来自b1b2

你可以这样做:

代码语言:javascript
复制
select distinct s1.country, s2.country
from ships s1
inner join Battles b1 on b.ship = s1.name
inner join Battles b2 on b2.ship <> s1.name and b2.battleName = b1.battleName
inner join ships s2 on s2.name = b2.ship and s2.country < s1.country
票数 4
EN

Stack Overflow用户

发布于 2013-10-03 22:43:01

你能尝试一个嵌套的查询,得到一个赢家和输家的表,然后加入他们的战斗名称吗?

代码语言:javascript
复制
SELECT
WINNER.country as Country1
,LOSER.country as Country2

FROM
(
  SELECT DISTINCT country, battleName
  FROM Battles 
  INNER JOIN Ships ON Battles.ship = Ships.name
  WHERE Battles.Result = 1
) AS WINNER

INNER JOIN 
(
  SELECT DISTINCT country, battleName
  FROM Battles 
  INNER JOIN Ships ON Battles.ship = Ships.name
  WHERE Battles.Result = 0
) AS LOSER

ON WINNER.battlename = LOSER.battlename
ORDER BY WINNER.country
票数 1
EN

Stack Overflow用户

发布于 2021-03-31 06:45:57

试试看,我认为它很简洁:

代码语言:javascript
复制
SELECT DISTINCT s1.country, s2.country
FROM ships s1, ships s2, battles b1, battles b2 -- i just list all tables here but you can use the left join etc.
WHERE s1.name=b1.ship AND s2.name=b2.ship AND b1.battleName=b2.battleName -- for the tables to join each other
AND s1.country < s2.country --key condition
ORDER BY s1.country ASC
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19170249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档