2010-10-02 117 views
4

我想从一个表中获取所有的字段,并在第二个表中使用DISTINCT。使用INNER JOIN从一个表中获取所有字段?

我有这样的:

SELECT stats.*, 
DISTINCT(visit_log.blog_id) AS bid 
FROM stats 
INNER JOIN visit_log ON stats.blog_id = visit_log.blog_id 

但我得到这个错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DISTINCT(visit_log.blog_id) AS bid FROM stats INNER JOIN visit_log ON stats.blog' at line 1

任何想法?

回答

6

相反接合针对visit_log的,可以构造只含有不同blog_id值的派生表。

select stats.*, v.blog_id 
from stats 
inner join (select distinct blog_id from visit_log where stats.blog_id = visit_log.blog_id) as v 
+0

伊夫修改了一下你的代码,它适用于我的需求。谢谢! – Klian 2010-10-03 08:59:09

1
SELECT stats.*, dr.blog_id 
FROM stats 
INNER JOIN (SELECT DISTINCT(visit_log.blog_id) AS bid FROM visit_log) AS dr 
     ON stats.blog_id = dr.blog_id 
+0

感谢您的回复,但我得到:你在你的SQL语法错误;检查对应于你的MySQL服务器版本使用附近的正确语法手册“(SELECT DISTINCT(visit_log.blog_id)AS出价从visit_log)博士 从统计 INNER J” – Klian 2010-10-02 14:26:29

0

您只在visit_log中选择blog_id,这是您加入的列。所以您的查询很像:

select * 
from stats s 
where 
exists (select null from visit_log v where s.blog_id = v.blog_id) 
+0

您的查询工作正常,但只选择“stats”表的列,我也想选择visit_log的列。香港专业教育学院试图用:从visit_log v ....选择*其中s.blog_id = v.blog_id但它不工作 – Klian 2010-10-03 07:55:44

0
select * from visit_log v where v.blog_id in/= (select s.blog_id from stats s) 
+0

它是如何工作/为什么它的工作原理和降价dormatting将使这个答案更有价值的一个小的解释。请参阅[this](http://stackoverflow.com/help/how-to-answer)以获得编写答案的指导 – Tensibai 2015-04-22 10:11:14