我在使用*时遇到问题。我有一个表作为连接,我试图做一个声明,如:
SELECT DISTINCT Name, * FROM table_a JOIN table_a.id=table_b.id WHERE status=1
但它不允许我这样做。有没有办法使用Distinct with * option?
答案 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
如果您想避免枚举属性,这很有用。当您这样做,并且关系发生变化(一个属性被删除或添加)时,您的查询将无效。