mysql与其他表中的条件左连接
我有两个mysql表: 表1:表项目mysql与其他表中的条件左连接,mysql,Mysql,我有两个mysql表: 表1:表项目 ╔════╦═══════╦════════╦══════════╗ ║ id ║ catid ║ itemid ║ itemname ║ ╠════╬═══════╬════════╬══════════╣ ║ 1 ║ 1 ║ 1 ║ Pen ║ ║ 2 ║ 1 ║ 2 ║ Pencil ║ ║ 3 ║ 1 ║ 3 ║ Sharpner ║ ║ 4 ║ 2 ║ 4
╔════╦═══════╦════════╦══════════╗
║ id ║ catid ║ itemid ║ itemname ║
╠════╬═══════╬════════╬══════════╣
║ 1 ║ 1 ║ 1 ║ Pen ║
║ 2 ║ 1 ║ 2 ║ Pencil ║
║ 3 ║ 1 ║ 3 ║ Sharpner ║
║ 4 ║ 2 ║ 4 ║ Book ║
║ 5 ║ 2 ║ 5 ║ Notebook ║
║ 6 ║ 3 ║ 6 ║ Pant ║
║ 7 ║ 4 ║ 7 ║ Shirt ║
╚════╩═══════╩════════╩══════════╝
表2:2015年投标
╔════╦════════╦══════╦══════╗
║ id ║ itemid ║ year ║ rate ║
╠════╬════════╬══════╬══════╣
║ 1 ║ 1 ║ 2015 ║ 3.0 ║
║ 2 ║ 2 ║ 2015 ║ 5.0 ║
║ 3 ║ 5 ║ 2015 ║ 7.0 ║
║ 4 ║ 1 ║ 2016 ║ 3.5 ║
║ 5 ║ 5 ║ 2016 ║ 7.8 ║
║ 6 ║ 7 ║ 2016 ║ 20.0 ║
╚════╩════════╩══════╩══════╝
我希望得到如下结果:
结果表:2015年
╔══════════╦══════╦══════╗
║ itemname ║ rate ║ year ║
╠══════════╬══════╬══════╣
║ Pen ║ 3.0 ║ 2015 ║
║ Pencil ║ 5.0 ║ 2015 ║
║ Sharpner ║ null ║ null ║
╚══════════╩══════╩══════╝
若要在运行以下查询时获取上述结果表:
SELECT i.itemname, b.rate, b.year
FROM table_item i LEFT JOIN bid-2015 b ON i.itemid=b.itemid
WHERE i.catid=1 AND b.year=2015
然后它给我以下输出:
╔══════════╦══════╦══════╗
║ itemname ║ rate ║ year ║
╠══════════╬══════╬══════╣
║ Pen ║ 3.0 ║ 2015 ║
║ Pencil ║ 5.0 ║ 2015 ║
║ Notebook ║ 7.0 ║ 2015 ║
╚══════════╩══════╩══════╝
如何使用条件左连接这些表,以便它可以输出第一个表?左连接与内部连接类似,只是它将至少返回一次A中的每条记录,如果没有实际匹配的记录,则用空值替换b中缺少的字段 然而,WHERE条件是在左联接后计算的,因此上面的查询在联接后检查列。没有空值可以满足相等条件,因此a中没有相应b记录的记录将不可避免地被过滤掉 本质上,这个查询是一个内部连接,只是效率较低 要仅匹配b.column='something'的记录(同时仍从a返回所有记录),应将此条件移到ON子句中:
SELECT i.itemname,b.rate,b.year
from table_item i
LEFT JOIN bid-2015 b
ON i.itemid=b.itemid
AND i.catid=1 AND b.year=2015
我相信你的
WHERE
子句有问题。删除I.catid=1的条件