我如何 SQL Join 2 个数据库,在一列中只有不同的结果
Posted
技术标签:
【中文标题】我如何 SQL Join 2 个数据库,在一列中只有不同的结果【英文标题】:How can I SQL Join 2 databases with only distinct results in one column 【发布时间】:2015-04-16 13:31:05 【问题描述】:我正在使用交互式 SQL 教程(您可以从 http://sol.gfxile.net/ 获取结构)来帮助我解决实际问题。我在左表中获得不同的结果时遇到问题,而在右 SQL 表中仍然返回非空结果。以下是我的尝试和结果:
SELECT stars.name as sn, planets.name
FROM stars LEFT OUTER JOIN planets
ON stars.starid=planets.starid
sn name
O-00000 (null)
G-00001 (null)
M-00002 (null)
K-00003 (null)
G-00004 (null)
G-00005 G-00005/A
G-00005 G-00005/B
在尝试 1 中,我在“名称”列中得到了结果,但在我的“sn”列中被骗了,因为有些恒星有多个行星。尝试2:
SELECT stars.name, planets.name
FROM stars LEFT OUTER JOIN planets
ON stars.starid=planets.starid
where not exists (
select 1 from stars
where stars.starid = planets.starid
)
name name
O-00000 (null)
G-00001 (null)
M-00002 (null)
K-00003 (null)
G-00004 (null)
在尝试 2 中,我在第 1 列中获得了唯一记录,但第 2 列中的所有记录均为空值。如何在第 1 列中获得唯一记录,在第 2 列中获得非空值?
【问题讨论】:
但是您已经在 1 个查询中获得了它?第一个结果有什么问题?你能提供你需要的预期结果吗? 如果是 G-00005,您有两个行星。如何定义您希望在预期结果中看到哪一个? -Alex 第一个结果在左列重复了 G-00005。 @Guneli,我不介意用什么条件来显示行星结果,如果有行星的话,每颗恒星只显示一颗行星。我知道有些星星会在行星列中显示为空,但 col2 应该显示每颗星星最多 1 个行星 @dharkko 所以你想随机替换星名到任何属于那个星 G-00005/A 或 G-00005/B 的 pllnet 名称?这些对你有什么好处? 然后做一个 GROUP BY 和 MIN/MAX/WHATEVER... 【参考方案1】:不确定您的目标是什么,但请尝试:
SELECT COALSCE(planets.name,stars.name) as name
FROM stars LEFT JOIN planets
ON stars.starid=planets.starid
GROUP BY stars.starid
也许你想要
SELECT stars.name as sn, planets.name
FROM stars LEFT JOIN planets
ON stars.starid=planets.starid
GROUP BY stars.starid
【讨论】:
具体来说,这个答案最适合我,因为与其他选项相比,它维护了列标题。 很高兴听到。谢谢你。祝你的项目好运!\【参考方案2】:假设每颗星星都有唯一的名字,你可以试试这个:
SELECT s.name as sn, (SELECT MAX(name) FROM planets WHERE starid=s.starid)
FROM stars s;
或
SELECT s.name as sn, (SELECT name FROM planets WHERE starid=s.starid LIMIT 1)
FROM stars s;
【讨论】:
您的两个解决方案都运行良好 - 我想我认为我需要使用连接 - thx以上是关于我如何 SQL Join 2 个数据库,在一列中只有不同的结果的主要内容,如果未能解决你的问题,请参考以下文章