MySQL 连接和默认

标签 mysql sql

我对 SQL 查询还很陌生,不太明白这个问题。

我有两个表,其中一个表正在运行一个通用的SELECT ... WHERE, super 简单的 SQL 语句。

例如:

SELECT * from maindata where somedata4 LIKE "%data4.%"

这会返回下面所有 6 个条目的列表,但是我想要一个附加列来显示当前 userdata.userId 是否有匹配的行,并包含该行的金额列。如果没有该行,则默认值为 0。

表:主数据

id | somedata | somedata2 | somedata3 | somedata4
_________________________________________________
1  | data1.1  | data2.1   | data3.1   | data4.1
2  | data1.2  | data2.2   | data3.2   | data4.2
3  | data1.3  | data2.3   | data3.3   | data4.3
4  | data1.4  | data2.4   | data3.4   | data4.4
5  | data1.5  | data2.5   | data3.5   | data4.5
6  | data1.6  | data2.6   | data3.6   | data4.6

表:用户数据

id | itemId | amount | userId
_____________________________
1  | 6      | 4      | 1
2  | 4      | 4      | 26
3  | 4      | 2      | 1

它应该在表ma​​indata中搜索WHERE somedata4 LIKE "%data4.%",并在每个条目上在表userdata中查找userdata.amountmaindata.id = userdata.itemId WHERE maindata.userId = 1

这是我目前拥有的 SQL

SELECT m.*, IFNULL(u.amount,0)
from maindata m
LEFT OUTER JOIN userdata u ON m.id = u.itemId
WHERE m.somedata4 LIKE "%data4.%"

我缺少的是仅过滤 userdata.userId = 1 中的金额,我希望整个列表按该查询中的原样显示。

预期结果:

id | somedata | somedata2 | somedata3 | somedata4 | amount
__________________________________________________________
1  | data1.1  | data2.1   | data3.1   | data4.1   | 0
2  | data1.2  | data2.2   | data3.2   | data4.2   | 0
3  | data1.3  | data2.3   | data3.3   | data4.3   | 0
4  | data1.4  | data2.4   | data3.4   | data4.4   | 4
5  | data1.5  | data2.5   | data3.5   | data4.5   | 0
6  | data1.6  | data2.6   | data3.6   | data4.6   | 2

最佳答案

SELECT m.*, IFNULL(u.amount,0) from maindata m LEFT OUTER JOIN
  userdata u ON m.id = u.itemId WHERE m.userId = 1

关于MySQL 连接和默认,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27447693/

相关文章:

sql - 单个数据集上的 SSRS 查找

sql - 体面的可视化 SQL 查询生成器

php - 使用 PHP 和 MYSQL 进行过滤

mysql - 如何给出多于一个的having子句

mysql - 如何用 'table a' .'column b' 替换 'table b' .'column b' 如果 'table a' .'column a' 匹配 'table b' .'column a'

mysql - 查询具有多个关联交易的发票

php - MySQL更新查询,如何跳过空值?

mysql - mysql中如何实现多次NULL检查事务

sql - Postgresql SELECT 表中的数据条目存在 ID

mysql - 将特定列中具有相同值的行分组