2017-08-25 3 views
0

私はシリアル番号を持つ簡単な製品群を持っています。製品が販売されている場合、そのシリアル番号はsold_itemsになりますが、これまで存在していたすべてのアイテムはall_itemsに残ります。 is_soldを作成する別のテーブルのインデックスの存在に基づくMySQLフィールド

いくつかのサンプルデータ:私は私のクエリを使用して、このような何かをしようとしている

all_items 
id | serial_number | product_name | product_price 
1 | XXXXXXXXXXX01 | Laptop  | 199 
2 | XXXXXXXXXXX02 | Tablet  | 99 

sold_items 
id | serial_number | sold_time 
1 | XXXXXXXXXXX02 | [TIMESTAMP] 

:この場合

SELECT 
    all_items.* , 
    (JOIN sold_items ON sold_items.serial_number = all_items.serial_number) AS is_sold 
FROM all_items 

は、予想される出力は次のようになり

[ 
    0=>[ 
    'id'=>1, 
    'serial_number'=>XXXXXXXXXXX01, 
    'product_name'=>Laptop, 
    'product_price'=>199, 
    'is_sold'=>0 
    ], 
    1=>[ 
    'id'=>1, 
    'serial_number'=>XXXXXXXXXXX02, 
    'product_name'=>Tablet, 
    'product_price'=>99, 
    'is_sold'=>1 
    ] 
] 

これは単一のクエリで簡単に達成できますか?

答えて

2

LEFT JOINを使用して、もう一方のテーブルのIDがnullでないかどうかをテストします。

SELECT a.*, s.id IS NOT NULL AS is_sold 
FROM all_items AS a 
LEFT JOIN sold_items AS s ON a.serial_number = s.serial_number 
関連する問題