1

SQL クエリの正しい構文について教えていただければ幸いです (MySQL 5.5.25 を使用)。

私は3つのテーブルを持っています:

  • データ
  • data_tmp
  • ユーザー

dataテーブルが空です - 独自の構造がありますが、行はありません

データ:

id | name | who
----------------

data_tmp :

id | cars | who
---------------
1  | lambo| 2

ユーザー

who | name |
------------
 2  | john

私のクエリは次のとおりです。

SELECT DISTINCT 
    users.name, 
    (SELECT count(id) FROM data WHERE who = 1) as number, 
    data_tmp.cars 
FROM 
    users, data, data_tmp 
WHERE 
    users.who = 2 
    AND data_tmp.who = 2 
    AND data.who = 2

もちろん、これは空の結果を返します ( が空であるため、すべてのパラメーターに適合する行はありませんdata)。

私が達成したいことは次のとおりです。

users.name | number | data_tmp.cars |
-------------------------------------
 john      |    0   | lambo         |

何らかの方法で使用する必要があると確信してLEFT JOINいますが、正しい構文が見つかりません。あなたが私を助けてくれることを願っています。

カルレグ

4

2 に答える 2

2

これを試してください(サブクエリを使用せずに

SELECT  a.name, b.cars, count(c.id) as  number
FROM    users a 
            INNER JOIN data_tmp b
                on a.who = b.who
            LEFT JOIN data c
                on a.who = c.who AND
                   a.name = c.name
WHERE    a.who = 2 
GROUP BY a.name, b.cars

これはさまざまなサーバーで機能します。

MSSQL サーバー @ SQLFIDDLE
MYSQL @ SQLFIDDLE

于 2012-07-29T11:10:26.540 に答える
1

あなたの仮定は正しいです。次のように、左の JOIN を使用する必要があります。

SELECT DISTINCT users.name, (SELECT count(id) FROM data WHERE who = 1) as number, data_tmp.cars 
FROM users
JOIN data_tmp USING (who)
LEFT JOIN data USING(who)
WHERE users.who = 2
于 2012-07-29T10:27:23.510 に答える