使用与*区别

时间:2010-11-21 14:44:45

标签: sql mysql postgresql

我在使用*时遇到问题。我有一个表作为连接,我试图做一个声明,如:

SELECT DISTINCT Name, * FROM table_a JOIN table_a.id=table_b.id WHERE status=1

但它不允许我这样做。有没有办法使用Distinct with * option?

4 个答案:

答案 0 :(得分:1)

我现在没有权限对此进行测试,但我怀疑问题不在于distinct,而是在每个表中都有相同名称的列(例如id)并且它不知道要选择哪两个冲突的列。如果你做select distinct table_a.*, table_b.* ...会改变吗?

答案 1 :(得分:1)

DISTINCT *可能会返回所有行,因为它们是不同的: - )

要使用DISTINCT name获取所有不同的名称,或使用SELECT name, COUNT(*) FROM ... GROUP BY name检索有关名称的统计信息(例如计数)。

答案 2 :(得分:0)

目前尚不清楚你想做什么。

也许您只想返回一个具有给定名称的列(而不是两个id列)。

在这种情况下,标准SQL查询是这样的:

SELECT * FROM table_a JOIN table_b USING (id) WHERE status=1

关键字DISTINCT表示执行select后,会删除重复的行(不是重复的列名)。

答案 3 :(得分:0)

基本上解决方案更像是这样:

SELECT *
FROM table_a, table_b
JOIN table_a.id = table_b.id
WHERE status = 1
GROUP BY table_a.name

如果您想避免枚举属性,这很有用。当您这样做,并且关系发生变化(一个属性被删除或添加)时,您的查询将无效。

阅读本文:MySQL 8.3.1.13. DISTINCT Optimization