mysql - MySql - 如何组合两个表的 where 子句以进行一对多连接?
问题描述
我有 2 张桌子:
sellers
id|name
locations
id|seller_id|name
现在我想获取卖家并加入位置,并在 where 子句中合并两个表中的属性。
初始查询是:
SELECT
sellers.id
FROM sellers
JOIN locations.seller_id = sellers.id
我必须再添加一个部分,因为我不想要重复的数据:
SELECT
sellers.id
FROM sellers
JOIN locations on locations.seller_id = sellers.id
WHERE (
SELECT id from locations
WHERE locations.seller_id = sellers.id
LIMIT 1
)
现在我可以执行以下操作
SELECT
sellers.id
FROM sellers
JOIN locations on locations.seller_id = sellers.id
WHERE (
SELECT id from locations
WHERE locations.seller_id = sellers.id
LIMIT 1
)
AND (
sellers.name = 'test'
OR
locations.name = 'test'
)
- 这里的问题是 MySql 将加入第一个位置,如果该位置的名称不是“test”并且该卖家的名称为“test”的位置,它不会不在结果中。
有任何想法吗?
更新 :
数据示例:
sellers
id|name
1|test
2|test2
locations
id|seller_id|name
1|1|test3
2|2|test4
3|2|test
4|2|test
result should be
[1, 2] but with my query it is [1]
解决方案
如果你让你的 SQL 更简单,答案就会变得更简单。
SELECT DISTINCT
sellers.*
FROM sellers
INNER JOIN locations on locations.seller_id = sellers.id
WHERE
sellers.name = 'test'
OR
locations.name = 'test'
推荐阅读
- swift - CLGeocoder().geocodeAddressString error codes
- python - 如果我没有在 requests.get() 中指定用户代理会发生什么?
- c - 如何调用外部程序集文件中的函数
- sql - 如何根据另一个表中多列的值从表中提取多行,然后在 SQL 中连接?
- javascript - 如何在Vue中使用router-link获取绝对URL超链接路径?
- php - 如何在 Laravel (PHP) 中从今天开始获得 10 天的未来日期
- kubernetes - 了解kubernetes端口转发、port和targetPort
- laravel - 使用 Sanctum 与 Laravel Spark 冲突
- android-studio - 由于Windows上的HAXM错误而无法安装android studio
- node.js - Express、Multer 和 Cloudinary 未返回完整的 Cloudinary 响应