mysql与其他表中的条件左连接

mysql与其他表中的条件左连接,mysql,Mysql,我有两个mysql表: 表1:表项目 ╔════╦═══════╦════════╦══════════╗ ║ id ║ catid ║ itemid ║ itemname ║ ╠════╬═══════╬════════╬══════════╣ ║ 1 ║ 1 ║ 1 ║ Pen ║ ║ 2 ║ 1 ║ 2 ║ Pencil ║ ║ 3 ║ 1 ║ 3 ║ Sharpner ║ ║ 4 ║ 2 ║ 4

我有两个mysql表:

表1:表项目

╔════╦═══════╦════════╦══════════╗
║ 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的条件