【问题标题】:Many-To-Many - get all records from related record多对多 - 从相关记录中获取所有记录
【发布时间】:2017-04-22 16:25:11
【问题描述】:

这是我的多对多表:

Table3:

ID_TABLE3
ID_TABLE1_FK
ID_TABLE2_FK
Some_Field

现在我想要从TABLE2 中选择所有记录,其中ID_TABLE1_FKTABLE3 = 3 中。这是我的查询,它返回所有记录,但它在末尾添加了TABLE3 的所有字段 - 这是不希望的! :

SELECT * from TABLE2
JOIN TABLE3 ON TABLE3.ID_TABLE2_FK = TABLE2.ID_TABLE2
WHERE TABLE3.ID_TABLE1_FK= 3

那么我哪里错了?

【问题讨论】:

  • @GordonLinoff,完成,感谢您的通知。
  • @a_horse_with_no_name,甲骨文。但是线程已经解决了。

标签: sql oracle


【解决方案1】:

只需使用普通的JOIN 并选择您真正想要的列;

SELECT t2.* 
FROM TABLE2 t2 JOIN
     TABLE3 t3
     ON t3.ID_TABLE2_FK = t2.ID_TABLE2
WHERE t3.ID_TABLE1_FK = 3;

这可能会产生重复(如果它们在TABLE3 中)。所以,你可能会更好:

SELECT t2.*
FROM TABLE2 t2
WHERE EXISTS (SELECT 1
              FROM TABLE3 t3
              WHERE t3.ID_TABLE2_FK = t2.ID_TABLE2 AND t3.ID_TABLE1_FK = 3
             );

【讨论】:

  • DISTINCT 可以帮助处理重复项吗?我没有测试查询,但我想这样的事情可能会在不添加另一个选择的情况下完成这项工作:SELECT DISTINCT t2.* FROM ...
  • @Gordon Linoff,谢谢。我测试了他们两个并且他们工作。但是我需要一点解释......我已经像您在发布之前所做的那样做了一个简单的 JOIN 并且输出是相同的。您的建议仅在“SELECT t2.*”中有所不同 - 我所做的只是“SELECT * from”。这是一个错误还是什么?...看看我编辑的有问题的查询,你会在那里看到。
  • @Jacopo,问题只是除了我的相关记录之外,结果中还显示了多对多字段。
  • 是的,对于这个 Gordon 的解决方案,在选择中使用 TABLE2.* 肯定会解决问题。我只是想知道是否可以简化第二个查询(以消除重复)
  • @Jacopo,你能解释一下为什么会出现这个错误吗?我的意思是如果你只是在做 SELECT * from ?
猜你喜欢
  • 2017-07-25
  • 1970-01-01
  • 2022-01-12
  • 2019-02-24
  • 1970-01-01
  • 2016-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多