Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/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
SQL:在不同表之间搜索至少2个类似行_Sql_Search - Fatal编程技术网

SQL:在不同表之间搜索至少2个类似行

SQL:在不同表之间搜索至少2个类似行,sql,search,Sql,Search,这是我当前的设置: 我有两张桌子,食谱和配料 配方保存ID和其他数据配料每个配方需要X行。 一个人如何能用至少两种匹配的配料匹配两种食谱? 我可以指定哪种配料必须匹配,但我的问题是,当配方中有10多种配料,而我需要两种使用相同2种配料的配方,而不知道是哪一种。 对不起,我的英语不是我的母语。如果需要,或者我不够清楚,我会发布更多细节。 实例: 食谱1有:鱼、土豆和盐。 食谱2有:火鸡和米饭。 食谱3有:鱼、米饭和盐。 食谱4有:火鸡、土豆和盐。 基于配方1的结果应为:4 基于配方2的结果应为

这是我当前的设置:
我有两张桌子,食谱配料
配方保存ID和其他数据配料每个配方需要X行。
一个人如何能用至少两种匹配的配料匹配两种食谱?
我可以指定哪种配料必须匹配,但我的问题是,当配方中有10多种配料,而我需要两种使用相同2种配料的配方,而不知道是哪一种。
对不起,我的英语不是我的母语。如果需要,或者我不够清楚,我会发布更多细节。

实例:
食谱1有:鱼、土豆和盐。
食谱2有:火鸡和米饭。
食谱3有:鱼、米饭和盐。
食谱4有:火鸡、土豆和盐。

基于配方1的结果应为:4
基于配方2的结果应为:无
基于配方3的结果应为:1
基于配方4的结果应为:1

(是的,我需要根据此处未解释的过滤器运行每个配方)

尝试以下方法:

WITH REC_ING AS (
SELECT *
FROM RECIPE AS T1
INNER JOIN
INGREDIENTS AS T2
ON T1.ID = T2.ID)

SELECT *
FROM (
SELECT T1.ID AS ID1, T2.ID AS ID2
FROM REC_ING AS T1
INNER JOIN
REC_ING AS T2
ON T1.INGREDIENT_ID = T2.INGREDIENT_ID 
AND T1.ID != T2.ID) AS JOINED_TAB
GROUP BY ID1, ID2
HAVING COUNT(*) >= 2

这是一份草稿。如果它听起来像你想要的,我可以做一个更详细的例子(包括SQL Fiddle)。

试试下面的例子:

WITH REC_ING AS (
SELECT *
FROM RECIPE AS T1
INNER JOIN
INGREDIENTS AS T2
ON T1.ID = T2.ID)

SELECT *
FROM (
SELECT T1.ID AS ID1, T2.ID AS ID2
FROM REC_ING AS T1
INNER JOIN
REC_ING AS T2
ON T1.INGREDIENT_ID = T2.INGREDIENT_ID 
AND T1.ID != T2.ID) AS JOINED_TAB
GROUP BY ID1, ID2
HAVING COUNT(*) >= 2

这是一份草稿。如果这听起来像你在寻找的,我可以做一个更详细的例子(包括SQL Fiddle)。

如果你需要将其扩展到两个以上的成分,或者要更详细地解释问题空间和存在哪些替代查询,请看这篇关于的扩展文章


选择不同的A.配方id、C.配方id和其他配方id
从成分A
在A.recipe\u id=B.recipe\u id和A.component
A和B是属于同一配方的两种不同成分。 使用这些,我们加入了C和D,它们是相同的两种成分(A=C,B=D),但其中C和D属于相同的另一个配方


这将返回共享2种成分的每对食谱的不同ID。您可以通过两次返回配方表获取实际配方名称。

如果您需要将其扩展到两种以上的成分,或者要更详细地解释问题空间以及存在哪些替代查询,请参阅这篇关于的扩展文章


选择不同的A.配方id、C.配方id和其他配方id
从成分A
在A.recipe\u id=B.recipe\u id和A.component
A和B是属于同一配方的两种不同成分。 使用这些,我们加入了C和D,它们是相同的两种成分(A=C,B=D),但其中C和D属于相同的另一个配方


这将返回共享2种成分的每对食谱的不同ID。您可以通过两次返回配方表获取实际的配方名称。

这很好,但是如果我需要3种匹配的成分,我必须更改代码。但我会对它进行一些测试。感谢您的几次修改,效果很好(请记住,原始表格与食物无关)Richard,我很难获得食谱上的一个值,您能帮忙吗?我不知道您想要什么,也许您可以问一个关于DDL(表格结构)、样本数据、您期望的内容、您尝试过的内容的新问题,还有什么没有按预期工作?据我所知,查询对于问题中的示例数据是正确的,因此
在获取一个值时遇到问题是很难解释的。对不起。还在这里运行一些测试。我会在可能的时候添加信息。这很好,但是如果我需要3种匹配的成分,我必须更改代码。但我会对它进行一些测试。感谢您的几次修改,效果很好(请记住,原始表格与食物无关)Richard,我很难获得食谱上的一个值,您能帮忙吗?我不知道您想要什么,也许您可以问一个关于DDL(表格结构)、样本数据、您期望的内容、您尝试过的内容的新问题,还有什么没有按预期工作?据我所知,查询对于问题中的示例数据是正确的,因此
在获取一个值时遇到问题是很难解释的。对不起。还在这里运行一些测试。我会在可能的时候添加信息。嗯。。。没用,还在想办法。食谱和配料只是一个例子。真正的餐桌与食物无关:D:D:D:居住。我会坚持这一条。它更灵活。嗯。。。没用,还在想办法。食谱和配料只是一个例子。真正的餐桌与食物无关:D:D:D:居住。我会坚持这一条。它更灵活。