2

这是我的桌子:

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

4 回答 4

3

这可以通过仅连接两个表来实现:transuser.

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

SQLFiddle 演示

否则,如果您想访问表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 演示

于 2012-10-24T14:38:50.730 回答
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

于 2012-10-24T14:39:31.757 回答
1

您想首先加入trans表格,因为它与以下内容有相互关系user

SELECT u.fname, t.click
FROM   trans t
       INNER JOIN user u
               ON u.id = t.userid
ORDER  BY u.fname; 
于 2012-10-24T14:41:01.753 回答
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

然后你将它加入到共享相同的trans表中。adidtrans

这些都没有意义。


您应该将 加入usertrans具有userid字段的表中。

而且您还应该将 加入adstrans具有adid字段的表中。

SELECT
  u.fname,
  a.click
FROM
  user
INNER JOIN
  trans
    ON trans.userid = user.id
INNER JOIN
  ads
    ON ads.id = trans.adid
于 2012-10-24T14:45:07.207 回答