2012-10-29 65 views
1

我有2个表如下:Mysql的innerjoin条款不工作

talk

topic_id | topic_name | user_id (user who create topic) 
    1   test1  1 
    2   test2  2 

talk_reply

talk_reply_id | message | topic_id | user_id (user who reply to specific topic) 
    1   hi1  1   3 
    2   hi2  1   4 

user

user_id | name 
    1  mark 
    2  pedro 
    3  gates 
    4  steve 

我的查询如下:

SELECT `tr`.`message`, 
     `tr`.`user_id`, 
     `tr`.`topic_id`, 
     `u`.`name` 
FROM `talk_reply` AS `tr` 
INNER JOIN `users` AS `u` ON tr.user_id = u.user_id WHERE (tr.topic_id=1) 

但我只得到1分的结果,而不是2,我缺少什么吗?谢谢。

+0

你想得到什么? –

+0

我想从talk_reply表中获取回复特定主题的用户的名称,在这种情况下topic_id 1 – d3bug3r

+0

@zlippr - 您提供的数据返回两行。实际上*使用的数据中有一个错误,您没有向我们展示* actual *语句,或者MySQL的sql引擎包含严重错误。我怀疑这是后者:) –

回答

0

使用此:

SELECT `tr`.`message`, 
     `tr`.`user_id`, 
     `tr`.`topic_id`, 
     `u`.`name` 
FROM `talk_reply` AS `tr` 
AND `users` AS `u` 
WHERE tr.user_id = u.user_id AND (tr.topic_id=1) 
+0

如果where子句不起作用,那么... –

+0

无法正常工作#1064 - 您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以便在'AND'用户附近使用正确的语法AS'u' WHERE tr.user_id = u.user_id AND tr.topic_id = 1第6行限制0,30' – d3bug3r

1
SELECT t.topic_id, t.user_id, u.name, tr.message 
FROM talk t 
INNER JOIN talk_reply tr ON tr.topic_id = t.topic_id 
INNER JOIN users u ON u.user_id = t.user_id 
WHERE t.topic_id = '1' 

UPDATE

SELECT tr.topic_id, tr.user_id, u.name, tr.message 
FROM talk_reply tr 
INNER JOIN users u ON u.user_id = tr.user_id 
WHERE tr.topic_id = '1' 
+0

谢谢有用!! – d3bug3r

+0

@zlippr:很高兴帮助你:) –

+3

OP的选择列表是不同的,他只需要来自talk_reply和用户表的列。他的查询很好,它应该工作。无需在这里使用谈话表 – AnandPhadke

1
SELECT tr.`message`, 
     tr.`user_id`, 
     tr.`topic_id`, 
     (select u.`name` from users u where u.user_id = tr.user_id) name 
FROM `talk_reply` as tr 
WHERE tr.topic_id=1 

SQLFIDDLE DEMO

+0

只返回1结果 – d3bug3r

+0

试试这个更新的查询 – AnandPhadke

+0

好吧得到它,谢谢.. – d3bug3r

1
select a.topic_id, a.user_id,b.message,c.name 
from talk a 
inner join talk_reply.b on a.topic_id=b.topic.id 
inner join users c on c.user_id=a.user_id 
where t.topic_id=1;