【发布时间】:2017-07-04 12:08:37
【问题描述】:
我有 2 个带有 id 的主表
ingredients master
------
id int
name varchar(50)
product master
-----
id int
pname varchar(50)
product ingredients
----
inId int (fk - ingredients master)
prId int (fk - product master)
现在的情况是产品有以下数据
配料大师 ----- (id , name) {[1, floor], [2, salt], [3, sugar], [4, oil], [5, pepper]}
产品大师 ----- (id , pname) {[1 , chapati], [2 , Pizza bun], [3 , chappati type 2], [4 , Pizza bun type 2]}
产品成分 ----- (inId , prId) {[1, 1], [2, 1], [3, 1], [1, 2], [2, 2], [3, 2], [4, 2], [1, 3], [2, 3], [3, 3], [1, 4], [2, 4], [3, 4], [4, 4]}
现在我想触发一个选择查询,在那里我可以获得 chapati type 2 作为 chapati 的替代品或 Pizza bun type 2 作为 Pizza bun 的替代品
我已经尝试了谷歌,但无法提出可行的解决方案。
我只想要给定项目的确切替代项目。就像薄饼和薄饼类型 2 在成分方面完全相同。披萨面包和 2 型披萨面包完全相同,但是当我尝试查询时,它会给出所有项目。因为有一些像地板这样的项目是共同的。
【问题讨论】:
-
你根本没有解释你的逻辑。您正在运行哪种查询?你有没有尝试过?
-
我尝试了很多查询,但都返回有线结果,所以我认为最好在这里咨询专家
-
至少告诉我们预期的输出。您想选择哪些记录?我认为
LEFT JOIN或RIGHT JOIN在您的情况下可能会很方便。 -
我最近尝试的一个查询是:从 inId 所在的产品成分中选择不同的 prid(从 prId = 1 的产品成分中选择 inId),但这并没有给出任何想要的答案
-
预期答案是这样的:如果我通过 chapati 的产品 id 即 1,那么根据当前情况,我将获得 1,3 或仅 3。或者如果我传递 chapati 类型 2 即 3 的产品 id,那么我应该只获得 1,3 或只有 1 的产品 id。因为它们都具有完全相同的成分。
标签: sql sql-server tsql select where-clause