2017-08-25 24 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是否为空。

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 
相关问题