Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql连接:仅当连接中的多行匹配时才选择_Mysql_Join - Fatal编程技术网

Mysql连接:仅当连接中的多行匹配时才选择

Mysql连接:仅当连接中的多行匹配时才选择,mysql,join,Mysql,Join,我想知道这里是否有人能帮我重新表述一下,这样我就只能从works中得到结果,如果worksid+prod\u instruments\u id++number都可以在works\u instruments中找到 这就是我所拥有的: SELECT `works`.`id`, `composers`.`first_name` FROM `works` JOIN `composers` ON `works`.`composers_id` = `composers`.`i

我想知道这里是否有人能帮我重新表述一下,这样我就只能从
works
中得到结果,如果
works
id
+
prod\u instruments\u id
+
+
number
都可以在
works\u instruments
中找到

这就是我所拥有的:

SELECT 
    `works`.`id`, 
    `composers`.`first_name` 
FROM `works` 
    JOIN `composers` ON `works`.`composers_id` = `composers`.`id` 
    JOIN `works_instruments` ON `works`.`id` = `works_instruments`.`works_id` 
WHERE 
    (true) 
    AND `composers`.`full_name` LIKE '%karl friedrich abel%' 
    AND `works_instruments`.`prod_dd_instruments_id` = 15 
    AND `works_instruments`.`number` >= 1 
    AND `works_instruments`.`prod_dd_instruments_id` = 5 
    AND `works_instruments`.`number` >= 1 
    AND `works`.`work_no` <> '001' AND `works`.`short_title` NOT LIKE '%*Works' 
ORDER BY 
    `composers`.`last_name`, 
    `composers`.`first_name`, 
    `works`.`full_title` 
LIMIT 0,50
选择
`works`.`id`,
`作曲家“名字”
来自“works”
加入'works'上的'composers'。'composers\u id`='composers`.'id`
在“works”上加入“works\u instruments”。“id”=“works\u instruments”。“works\u id”
哪里
(对)
还有“作曲家”。“全名”如“%karl friedrich abel%”
和'works\u instruments'。'prod\u dd\u instruments\u id`=15
和'works\u instruments'。'number`>=1
和'works\u instruments'。'prod\u dd\u instruments\u id`=5
和'works\u instruments'。'number`>=1
还有'works'。'work\u no'001'和'works'。'short\u title'不像'%*works'
订购人
`作曲家`.`姓`,
`作曲家`.`名字`,
`作品`.`全名`
限值0,50
现在,这不会返回任何结果。 然而,这确实:

SELECT 
    `works`.`id`, 
    `composers`.`first_name` 
FROM `works` 
    JOIN `composers` ON `works`.`composers_id` = `composers`.`id` 
    JOIN `works_instruments` ON `works`.`id` = `works_instruments`.`works_id` 
WHERE 
    (true) 
    AND `composers`.`full_name` LIKE '%karl friedrich abel%' 
    AND `works_instruments`.`prod_dd_instruments_id` = 15 
    AND `works_instruments`.`number` >= 1 
    AND `works`.`work_no` <> '001' AND `works`.`short_title` NOT LIKE '%*Works' 
ORDER BY 
    `composers`.`last_name`, 
    `composers`.`first_name`, 
    `works`.`full_title` 
LIMIT 0,50
SELECT 
    `works`.`id`, 
    `composers`.`first_name` 
FROM `works` 
    JOIN `composers` ON `works`.`composers_id` = `composers`.`id` 
    JOIN `works_instruments` ON `works`.`id` = `works_instruments`.`works_id` 
WHERE 
    (true) 
    AND `composers`.`full_name` LIKE '%karl friedrich abel%'  
    AND `works_instruments`.`prod_dd_instruments_id` = 5 
    AND `works_instruments`.`number` >= 1 
    AND `works`.`work_no` <> '001' AND `works`.`short_title` NOT LIKE '%*Works' 
ORDER BY 
    `composers`.`last_name`, 
    `composers`.`first_name`, 
    `works`.`full_title` 
LIMIT 0,50
选择
`works`.`id`,
`作曲家“名字”
来自“works”
加入'works'上的'composers'。'composers\u id`='composers`.'id`
在“works”上加入“works\u instruments”。“id”=“works\u instruments”。“works\u id”
哪里
(对)
还有“作曲家”。“全名”如“%karl friedrich abel%”
和'works\u instruments'。'prod\u dd\u instruments\u id`=15
和'works\u instruments'。'number`>=1
还有'works'。'work\u no'001'和'works'。'short\u title'不像'%*works'
订购人
`作曲家`.`姓`,
`作曲家`.`名字`,
`作品`.`全名`
限值0,50
这就是:

SELECT 
    `works`.`id`, 
    `composers`.`first_name` 
FROM `works` 
    JOIN `composers` ON `works`.`composers_id` = `composers`.`id` 
    JOIN `works_instruments` ON `works`.`id` = `works_instruments`.`works_id` 
WHERE 
    (true) 
    AND `composers`.`full_name` LIKE '%karl friedrich abel%' 
    AND `works_instruments`.`prod_dd_instruments_id` = 15 
    AND `works_instruments`.`number` >= 1 
    AND `works`.`work_no` <> '001' AND `works`.`short_title` NOT LIKE '%*Works' 
ORDER BY 
    `composers`.`last_name`, 
    `composers`.`first_name`, 
    `works`.`full_title` 
LIMIT 0,50
SELECT 
    `works`.`id`, 
    `composers`.`first_name` 
FROM `works` 
    JOIN `composers` ON `works`.`composers_id` = `composers`.`id` 
    JOIN `works_instruments` ON `works`.`id` = `works_instruments`.`works_id` 
WHERE 
    (true) 
    AND `composers`.`full_name` LIKE '%karl friedrich abel%'  
    AND `works_instruments`.`prod_dd_instruments_id` = 5 
    AND `works_instruments`.`number` >= 1 
    AND `works`.`work_no` <> '001' AND `works`.`short_title` NOT LIKE '%*Works' 
ORDER BY 
    `composers`.`last_name`, 
    `composers`.`first_name`, 
    `works`.`full_title` 
LIMIT 0,50
选择
`works`.`id`,
`作曲家“名字”
来自“works”
加入'works'上的'composers'。'composers\u id`='composers`.'id`
在“works”上加入“works\u instruments”。“id”=“works\u instruments”。“works\u id”
哪里
(对)
还有“作曲家”。“全名”如“%karl friedrich abel%”
和'works\u instruments'。'prod\u dd\u instruments\u id`=5
和'works\u instruments'。'number`>=1
还有'works'。'work\u no'001'和'works'。'short\u title'不像'%*works'
订购人
`作曲家`.`姓`,
`作曲家`.`名字`,
`作品`.`全名`
限值0,50
你能帮忙吗

我还尝试了左键和右键连接,但结果仍然为空(我只在此处粘贴左键):

选择
`works`.`id`,
`作曲家“名字”
来自“works”
加入'works'上的'composers'。'composers\u id`='composers`.'id`
在'works'上左键连接'works'u instruments'。'id`='works'u instruments`.'works'u id`
哪里
(对)
还有“作曲家”。“全名”如“%karl friedrich abel%”
和'works\u instruments'。'prod\u dd\u instruments\u id`=15
和'works\u instruments'。'number`>=1
和'works\u instruments'。'prod\u dd\u instruments\u id`=5
和'works\u instruments'。'number`>=1
还有'works'。'work\u no'001'和'works'。'short\u title'不像'%*works'
订购人
`作曲家`.`姓`,
`作曲家`.`名字`,
`作品`.`全名`
限值0,50
如果仪器没有uniqe ID,
工作是否有问题?
请参见此处的
works\u instruments
屏幕截图:

如果字段可以同时=15和=5,则没有数值。相反,您可以执行“IN(15,5)”,按works.id分组,并计算不同的prod_dd_instruments_id值以查看是否有两个;或者使用不同的条件集对同一个表进行两个单独的联接

编辑:有了您在下面提供的其他信息,类似的内容可能会更有帮助

SELECT works.*, composers.*
, SUM(IF(wi.prod_dd_instruments_id=15, wi.number, 0)) AS count15
, SUM(IF(wi.prod_dd_instruments_id=5, wi.number, 0)) AS count5
FROM works 
INNER JOIN `composers` ON `works`.`composers_id` = `composers`.`id` 
LEFT JOIN `works_instruments` AS wi ON `works`.`id` = wi.`works_id`
WHERE [the other criteria you had]
GROUP BY works.id
HAVING count15 > 1 AND count5 > 1
;

请注意,此查询仅适用于“5&15”;尽管(从您的“
(true)
”判断,我冒昧地猜测您至少部分地在代码中构造查询,因此我认为将上述代码变得更灵活一点不会太困难。

字段不能同时=15和=5。相反,您可以在(15,5)中执行“in”,按works.id分组,并计算不同的prod_dd_instruments_id值,以查看是否有两个;或者使用不同的条件集对同一个表进行两次单独的联接

编辑:有了您在下面提供的其他信息,类似的内容可能会更有帮助

SELECT works.*, composers.*
, SUM(IF(wi.prod_dd_instruments_id=15, wi.number, 0)) AS count15
, SUM(IF(wi.prod_dd_instruments_id=5, wi.number, 0)) AS count5
FROM works 
INNER JOIN `composers` ON `works`.`composers_id` = `composers`.`id` 
LEFT JOIN `works_instruments` AS wi ON `works`.`id` = wi.`works_id`
WHERE [the other criteria you had]
GROUP BY works.id
HAVING count15 > 1 AND count5 > 1
;

请注意,此查询仅适用于“5&15”;不过(从“
(true)
”判断)我冒昧地猜测,您至少在代码中构建了部分查询,因此我认为将上面的代码变得更灵活一点不会太困难。

谢谢。这听起来很有希望-但是,我不确定实际如何做。请注意,我也在寻找
works\u instruments
number
works\u仪器
number
>=1…我可以在(5,15)中使用要请求
prod\u instruments\u id
-但我如何在中也请求
number
?@JohnK根据OP,目前您只需检查
number>=1
两次。此外,两次加入表可能比在
中加入
更好;在
中加入
是一种薄型的
,以及
是的,我刚刚意识到我在检查数字两次。这使事情变得更加复杂,因为我检查数字两次的原因是:我的意思是检查是否有1个或更多的工具5和1个或更多的工具15。我想这可能会改变很多事情。我需要在works\u instruments
中添加一个唯一的索引,对吗?这样数字和仪器就可以与同一个索引关联。然后……我不知道-(@JohnK根据目前给出的信息,似乎不需要任何唯一性索引;但是如果您打算在works\u instruments中为每个
prod\u dd\u instruments\u id
works\u id
对只指定一行。)