MySQL:JOIN 查询获取具有可为空字段的所有项目

兰萨纳卡马拉

我有一个item表,它有一个表的外键引用tax列是tax_id

我曾经在我的架构中tax_idas NOT NULL,但是我只是改变了它,因为我希望它是可选的,所以现在它NULL DEFAULT NULL在架构中。

这打破了我的查询。现在,当我查询物品并加入税金时,我只会得到tax_id字段匹配的物品

这是我的查询:

SELECT item.*
FROM item
JOIN user_item
    ON user_item.item_id = item.id
JOIN tax
    ON tax.id = item.tax_id
WHERE user_item.user_id = ?
    AND item.deleted_at IS NULL
    AND user_item.deleted_at IS NULL
    AND tax.deleted_at IS NULL

这个查询有效,但是如果我得到以下项目:

+----+--------+--------------------+-------------+-------+---------------------+------------+------------+
| id | tax_id | name               | description | price | created_at          | updated_at | deleted_at |
+----+--------+--------------------+-------------+-------+---------------------+------------+------------+
|  1 |      2 | foo                |             |  1.13 | 2017-07-30 15:20:14 | NULL       | NULL       |
|  2 |   NULL | bar                |             |  0.67 | 2017-07-30 15:20:25 | NULL       | NULL       |
|  3 |   NULL | baz                |             |  1.15 | 2017-07-30 15:22:33 | NULL       | NULL       |
+----+--------+--------------------+-------------+-------+---------------------+------------+------------+

然后查询只返回 id 为 1 的项目。我也想要 id 2 和 3。

如何修改我的查询以实现此目的?

我了解查询的问题是这部分:ON tax.id = item.tax_id

穆雷尼克

这正是left joins 的用途:

SELECT item.*
FROM item
JOIN user_item
    ON user_item.item_id = item.id
LEFT JOIN tax -- Here!
    ON tax.id = item.tax_id
WHERE user_item.user_id = ?
    AND item.deleted_at IS NULL
    AND user_item.deleted_at IS NULL
    AND tax.deleted_at IS NULL

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在MySql中获取联接查询的所有字段的列名

来自分类Dev

具有重复字段的MySQL JOIN查询语法-“ database.table.field”

来自分类Dev

MYSQL INNER JOIN可能有空字段

来自分类Dev

具有自定义ON子句的MySQL JOIN子查询

来自分类Dev

具有3个INNER JOIN的MYSQL查询

来自分类Dev

MySQL查询-如何获取具有GROUP BY和WHERE条件的SUM并使用LEFT OUTER JOIN?

来自分类Dev

MySQL子查询JOIN

来自分类Dev

MySQL Join查询混淆

来自分类Dev

MySQL查询-多个JOIN

来自分类Dev

Mysql JOIN子查询

来自分类Dev

MySQL查询INNER JOIN

来自分类Dev

Django的。如何在JOIN查询和GROUP BY中获取所有字段

来自分类Dev

没有重复值的MySQL Join查询

来自分类Dev

最有效的JOIN查询-MySQL

来自分类Dev

MySQL Join显示所有行

来自分类Dev

mysql用join删除所有行

来自分类Dev

MySQL COUNT个具有JOIN的表

来自分类Dev

具有相同列名的MySQL Join Table

来自分类Dev

MySQL INNER JOIN具有不同的列名

来自分类Dev

具有COUNT个性能的MySQL JOIN

来自分类Dev

我如何查询mysql中字段不为空或null的所有记录?

来自分类Dev

带有IF的MySQL LEFT JOIN

来自分类Dev

MySQL查询获取所有照片

来自分类Dev

MySQL选择查询无法获取具有空值的数据

来自分类Dev

MySql:选择具有所有值的项目

来自分类Dev

如果字段不为空,则使用MYSQL JOIN

来自分类Dev

MySQL Join和COUNT(*)查询

来自分类Dev

棘手的MySQL JOIN查询

来自分类Dev

带条件的MySQL JOIN查询