SQL查询从具有相同列“名称”的其他两个表中获取具有不同值的单列“名称”[关闭]

Posted

技术标签:

【中文标题】SQL查询从具有相同列“名称”的其他两个表中获取具有不同值的单列“名称”[关闭]【英文标题】:SQL Query to get a single column 'name' with distinct values from two other tables having same column 'name' [closed] 【发布时间】:2018-03-26 21:09:58 【问题描述】:

有两个表作为猫和狗,两个表中的每只宠物都有“id”和“name”。架构可以从下面理解:

TABLE 'dogs'
    id INTEGER NOT NULL PRIMARY KEY,
    name VARCHAR (50) NOT NULL
TABLE 'cats'
    id INTEGER NOT NULL PRIMARY KEY,
    name VARCHAR (50) NOT NULL

问题要求“编写一个查询以选择所有不同的 pet.name”

【问题讨论】:

你有没有努力解决这个问题? 展示表格或使用示例代码,方便读者阅读 如果只有狗和猫,您可以从两者中选择不同的名称并将它们合并 在sql中研究“union”这个词 egw3schools.com/sql/sql_union.asp @Used_By_Already 除了一般 w3schools 的内容很糟糕。 【参考方案1】:
SELECT name FROM dogs 
UNION 
SELECT name FROM cats

使用 UNION 会删除重复的行,因此这里不需要使用 DISTINCT。 如果你想显示每个宠物的名字,而不仅仅是不同的名字,你应该使用 UNION ALL。

【讨论】:

【参考方案2】:
CREATE TABLE Pets(
ID INTEGER NOT NULL PRIMARY KEY
,Name VARCHAR(50) NOT NULL);

SELECT DISTINCT Name FROM Pets

【讨论】:

为什么不只在存在表上使用union【参考方案3】:

首先创建一个临时表,它将保存两个表中的数据,如下所述

create Temp table pet
as select name from dogs
union 
select name from cats;

从临时表中选择不同的名称

select distinct name from pet;

【讨论】:

您指定了解决方案的关键(单词)(UNIONselect DISTINCT),好!你可以解释一下,请检查temp table is created like this in mysql. @hc_dev,你的意思是说TEMPTEMPORARY关键字的区别,都可以接受 我没有尝试使用这个缩写。但是你写的很好,两者都会起作用。由于询问 OP 显然是 SQL 和 MySQL 的新手,因此解释关键字将是一个很好的教学(添加链接:例如到 MySQL docs,并避免在进一步研究 SO 时可能会混淆的快捷键。【参考方案4】:
select distinct name from dogs
union
select distinct name from cats

【讨论】:

联合本身将删除所有重复项。使用 'select distinct' 是多余的。 你说的是真的,但是如果在上面做索引,做不同的一方可以让它更快,它永远不会让它变得更糟 ***.com/questions/30142553/…【参考方案5】:

select name from (select name, "dog" as pet from cats 联合所有 选择名称,“猫”作为狗的宠物)按名称分组按名称排序

【讨论】:

欢迎来到 Stack Overflow!感谢您提供此代码 sn-p,它可能会提供一些有限的短期帮助。一个正确的解释would greatly improve 它的长期价值通过展示为什么这是一个很好的解决问题的方法,并将使它对未来有其他类似问题的读者更有用。请edit您的回答添加一些解释,包括您所做的假设。 @TobySpeight 您的评论写得真好!应该是[exp-code] 的 SO 上的自动扩展模板

以上是关于SQL查询从具有相同列“名称”的其他两个表中获取具有不同值的单列“名称”[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何查询多个表以获取表具有相同列名的记录

SQL

从名称具有相同首字母的表中选择

JOIN列在两个表中具有相同名称时的T-SQL语法缩写?

在Postgres中加入两个表后如何为具有相同名称的列提供别名

where 从具有列外键的表中查询