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;
【讨论】:
您指定了解决方案的关键(单词)(UNION
和 select DISTINCT
),好!你可以解释一下,请检查temp table is created like this in mysql.
@hc_dev,你的意思是说TEMP
和TEMPORARY
关键字的区别,都可以接受
我没有尝试使用这个缩写。但是你写的很好,两者都会起作用。由于询问 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查询从具有相同列“名称”的其他两个表中获取具有不同值的单列“名称”[关闭]的主要内容,如果未能解决你的问题,请参考以下文章