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:居住。我会坚持这一条。它更灵活。