加入三个表期待结果,但结果是错误的

时间:2012-10-24 14:33:23

标签: mysql sql

这是我的表:

user table:
id..|..fname
1...|..dan
2...|..den

trans table:
.transid.|..userid....|..adid.....|..click
.....1...|....1.......|.....1.....|.....1
.....2...|....2.......|.....1.....|.....1

ads table:
id..|..adname
1...|..sample

我的选择条款是:

select u.fname, 
       t.click 
from user u 
   inner join ads a on u.id=a.id 
   inner join trans t on a.id=t.transid 
order by u.fname;

我期待

的结果
fname....|..click
dan......|...1...
den......|...1...

但结果是错误的,它只显示第一行。这可能有什么问题?

4 个答案:

答案 0 :(得分:3)

这可以通过仅加入两个表来实现:transuser

SELECT  b.fname, a.click
FROM    trans a
        INNER JOIN user b
            ON a.userid = b.id

SQLFiddle Demo

另外,如果您想访问表格ads并使用INNER JOIN

加入表格
SELECT  b.fname, a.click, c.adname
FROM    trans a
        INNER JOIN user b
            ON a.userid = b.id
        LEFT JOIN ads c
            ON a.adid = c.id

SQLFiddle Demo

答案 1 :(得分:1)

我想你想要以下内容:

select u.fname, t.click
from user u
left join trans t 
  on u.id=t.transid
left join ads a
  on t.adid = a.id
order by u.fname;

请参阅SQL Fiddle with Demo

答案 2 :(得分:1)

您想首先加入trans表,因为它与user有相互关系:

SELECT u.fname, t.click
FROM   trans t
       INNER JOIN user u
               ON u.id = t.userid
ORDER  BY u.fname; 

答案 3 :(得分:1)

您只是以错误的顺序加入表格,以及错误的字段。

您的查询...

select u.fname, t.click
from user u
inner join ads a on u.id=a.id
inner join trans t on a.id=t.transid
order by u.fname; 

您将users加入ads aduser具有相同id的{​​{1}}。

然后您将其加入trans表,其中adid共享trans

这些都没有意义。


您应该将user加入trans表,其中包含userid字段。

您还应该将ads加入trans表,其中包含adid字段。

SELECT
  u.fname,
  a.click
FROM
  user
INNER JOIN
  trans
    ON trans.userid = user.id
INNER JOIN
  ads
    ON ads.id = trans.adid
相关问题