2016-09-12 7 views
-1

条件を満たす場合にのみテーブルを結合する(または結合テーブルから値を取得する)SQL SELECTステートメントを作成する必要がありますが、これは可能ですか?SQL SELECT文

私はユーザーIDを持っている注文テーブルを持っていますが、ゲストとして注文したユーザーのIDもランダムに生成しています。そして、私はそのIDで注文テーブルのユーザーテーブルに参加したいが、IDがランダムに生成されている場合、そのIDのユーザーテーブルにレコードがないので、注文テーブルから値だけを返したい。

私はuser_idのは、これがleft join sがあるため、正確に何である両方のテーブル

$sql = "SELECT orders.id_o, orders.user_id, orders.price, users.username 
FROM orders JOIN users 
ON orders.user_id = users.id 
ORDER BY order_date ASC"; 
+0

内部結合ではなく、結合に戻る –

+0

タイトルはいくつかの創造性を得ることができますか? – Drew

+1

[SQL JOINとさまざまな種類のJOIN]の重複している可能性があります(http://stackoverflow.com/questions/17946221/sql-join-and-different-types-of-joins) –

答えて

1

に存在する行を書き込みますこれ、これだけを持っています。コメントでフォローの質問に答えるために、あなたはnull sが左から返さ置き換えるために​​3210を使用することができます参加:

SELECT orders.id_o, orders.user_id, orders.price, 
      COALESCE(users.username, 'Guest') 
FROM  orders 
LEFT JOIN users ON orders.user_id = users.id 
ORDER BY order_date ASC 
+1

とすると、dupehammerできます – Drew

+1

ありがとう、それは動作しますいいね何も返されないフィールドのデフォルト値を設定することはできますか? (たとえば、ランダムに生成されたIDのユーザ名フィールドが空白で、デフォルト値をGuestに設定したい場合など) – rtom

+0

@rtom優雅なやり方は、 'coalesce'を使うことです。私の編集された答えを見てください。 – Mureinik

1

近く、ちょうどleft join

$sql = "SELECT orders.id_o, orders.user_id,orders.price, users.username 
    FROM orders Left JOIN users 
    ON orders.user_id = users.id 
    ORDER BY order_date ASC"; 
1

に次のステートメントを変更するには、それを行う必要があります:

SELECT 
orders.id_o, 
orders.user_id, 
orders.price, 
users.username 

FROM orders 

LEFT JOIN users 
    ON orders.user_id = users.id 

ORDER BY ORDER_DATE ASC