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句は次のとおりです。

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

これは、2つのテーブルのみを結合することで実現できます: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

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
left join trans t 
  on u.id=t.transid
left join ads a
  on t.adid = a.id
order by u.fname;

SQL FiddlewithDemoを参照してください

于 2012-10-24T14:39:31.757 に答える
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場所に参加します。aduserid

trans次に、それをテーブルに結合します。ここで、ad共有は。と同じidです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
于 2012-10-24T14:45:07.207 に答える