如果存在特定表上的缺失行,如何处理SQL连接

时间:2017-05-31 08:30:51

标签: mysql sql

    SELECT
    fromData.name as fromname, toData.name as toName, prodData.prodname, 
    t1.`from_id`, t1.`to_id` , t1.`product_id` , t1.`title`, t1.`message`, t1.`senttime` , t1.`readstatus`, t1.`responded`, t1.`merchanthidden`
    FROM `inquiries` as t1 
    INNER JOIN users as fromData on t1.from_id = fromData.id 
    INNER JOIN users as toData on t1.to_id = toData.id 
    INNER JOIN products as prodData on t1.product_id = prodData.id 
    WHERE t1.id=13

以上查询将3个表(查询,用户,产品)连接在一起,并从每个表中获取数据。

有时候产品中的商品可能是'表被删除。尝试通过已删除的产品ID加入产品表将导致查询失败。

有没有办法可以分配' prodData.prodname '如果产品表中缺少项目,则默认值并执行查询而不会失败?

3 个答案:

答案 0 :(得分:0)

所以努力学习:)。在表'产品'上使用LEFT JOIN。 谢谢大家的帮助。

答案 1 :(得分:0)

' INNER JOIN'只获取两个表中的行,使用左外连接来获取缺失的行。

这里有一个很好的图表: LEFT JOIN vs. LEFT OUTER JOIN in SQL Server

答案 2 :(得分:0)

为什么不使用左连接内部连接, LEFT JOIN关键字返回左表(table1)中的所有记录,以及右表(table2)中的匹配记录。如果没有匹配,则结果从右侧为NULL。

SELECT
    fromData.name as fromname, toData.name as toName, prodData.prodname, 
    t1.`from_id`, t1.`to_id` , t1.`product_id` , t1.`title`, t1.`message`, t1.`senttime` , t1.`readstatus`, t1.`responded`, t1.`merchanthidden`
    FROM `inquiries` as t1 
    INNER JOIN users as fromData on t1.from_id = fromData.id 
    INNER JOIN users as toData on t1.to_id = toData.id 
    LEFT JOIN products as prodData on t1.product_id = prodData.id 
    WHERE t1.id=13