有没有办法在这种类型的SQL SELECT中删除嵌套查询?
给定这个表结构和示例数据(t3不应该在查询中使用,它只是在这里显示t1和t2之间的关系):
t1 t2 t3
-------------- ----------------- --------------------------------
| id | value | | t1key | t3key | | id | value |
| 1 | 2008 | | 3 | 1 | | 1 | "New intel cpu in 2010" |
| 2 | 2009 | | 4 | 1 | | 2 | "New amd cpu in 2008" |
| 3 | 2010 | | 6 | 1 | | | ... |
| 4 | intel | | 1 | 2 | --------------------------------
| 5 | amd | | 5 | 2 |
| 6 | cpu | | 6 | 2 |
| | ... | | | ... |
-------------- -----------------
您将如何构建满足以下条件的SQL查询:
Given the input for t1.id is the set {6} returns t1.id set {3,4,6,1,5}
Given the input for t1.id is the set {6,4} returns t1.id set {3,4,6}
Given the input for t1.id is the set {5,4} returns t1.id set {}
当桌子更大时,不会扼杀性能......?
没有找到相关结果
已邀请:
5 个回复
需复
,呼叫表t3
并呼叫表t2
。 然后我猜你想要找到与一组特定word.ids在同一短语中的所有word.ids。那是对的吗?
更正 阅读Joe的评论并重新阅读问题详细信息,我想您希望找到所有出现在同一短语中的单词,并在指定列表中显示所有单词。 这看起来像一个关系划分问题:
第二解决方案
第三解决方案
注意:第一个(使用
)解决方案与其他两个解决方案有很大不同: 如果你尝试使用列表,其成员没有出现在表t2中,比如说
或
,它将显示来自t2的所有t1key。 在这种情况下,第二和第三解决方案将完全显示NO键。
吞睫素
部分真的是自我解释。在
2中是
子句中
-s的数量。例如:你使用的是
,那么你应该使用
。 我不确定
是否需要,但是我很懒,不能创建一个更大的数据集来测试:)
佬棠
您需要添加更多“交叉”子句,具体取决于输入集中的项目数。 在SQL Server上测试过。
剿畦缄饥小
从t1(关键字)开始,您将获得包含“cpu”(或其他)的所有t3(表达式)。您不需要直接加入t3,也不需要任何数据。第二次加入t2,您将获得找到的表达式中包含的所有其他关键字。你只需要返回它们的t1key。 更正:如果您不想要子查询,可以为每个要搜索的关键字创建一个连接:
坝镰补翔奋