mysql LEFT JOIN与其他表的条件

阿卜杜拉·马蒙·乌尔·拉希德

我有两个mysql表:

表1:table_item

╔════╦═══════╦════════╦══════════╗
║ 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 ║
╚══════════╩══════╩══════╝

我该如何用条件向左联接这些表,以便它可以输出第一个表?

玛莉

LEFT JOIN类似于INNER JOIN,不同之处在于它将至少返回一次来自a的每个记录,如果没有实际匹配的记录,则将b中的缺失字段替换为NULL值。

但是,WHERE条件是在LEFT JOIN之后评估的,因此上面的查询在连接后会检查该列。没有NULL值不能满足相等条件,因此不可避免地会过滤掉a中的记录而b中没有相应的记录。

本质上,此查询是一个INNER JOIN,效率较低。

为了只匹配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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MySQL LEFT JOIN 与 OR 条件

来自分类Dev

MySQL-SQL LEFT JOIN选择在其他表上找不到的空记录

来自分类Dev

MySQL与Left Join相反

来自分类Dev

与其他表mysql比较结果

来自分类Dev

MySQL从多个表与LEFT JOIN多个

来自分类Dev

Mysql Left join避免重复表

来自分类Dev

MySQL LEFT JOIN无法使用多个表

来自分类Dev

如何从LEFT JOIN MySQL表调用结果

来自分类Dev

MySQL "Left Outer Join" Issue

来自分类Dev

带有IF的MySQL LEFT JOIN

来自分类Dev

MySQL的:添加其中,在LEFT JOIN

来自分类Dev

MySQL 5.1.73 LEFT JOIN超时

来自分类Dev

MySQL可选的LEFT JOIN与MATCH

来自分类Dev

MySQL UNION ALL与LEFT JOIN

来自分类Dev

MYSQL LEFT JOIN选择增强

来自分类Dev

MYSQL中的LEFT JOIN问题

来自分类Dev

MySQL LEFT JOIN的WHERE子句

来自分类Dev

MySQL LEFT JOIN错误#1064

来自分类Dev

MySQL将用户表与其他表连接

来自分类Dev

Mysql Select与其他表中的选择结果

来自分类Dev

MySQL触发器查询与其他表联接

来自分类Dev

像查询剂量一样的MySQL查询在与其他表的where条件连接时发送准确的结果

来自分类Dev

MySQL LEFT JOIN具有WHERE条件的同一表

来自分类Dev

MySQL LEFT JOIN具有WHERE条件的同一表

来自分类Dev

SQLite3-为什么LEFT JOIN与其他RDBMS不同?

来自分类Dev

Mysql的INNER JOIN后LEFT OUTER JOIN

来自分类Dev

mySQL LEFT JOIN和COUNT表中出现的次数

来自分类Dev

表的GROUP BY在使用LEFT JOIN的MySQL中返回错误计数

来自分类Dev

MySQL LEFT JOIN Count列连接3个表