【问题标题】:Join from multiple tables using WHERE IN使用 WHERE IN 从多个表连接
【发布时间】:2014-10-23 02:57:21
【问题描述】:

我很难在 Google 上找到与此问题相关的任何内容。

我试图做的是使用这样的 IN 语句从具有未知数量值的多个表中查询...

SELECT * FROM table_1 t1 WHERE t1.t1_id IN ('12345223', '2343374') JOIN table_2 t2 WHERE t2.t2_id IN ('2164158194', '3232422423')

上面的代码演示了我想要实现的目标。我不是 SQL 专家,所以我不完全确定我所追求的是否可以通过这种方式完成,或者是否有更好的方法来做到这一点。非常感谢任何帮助。

【问题讨论】:

  • 你给我们表结构、样本数据和你想要的结果?
  • JOIN 需要出现在 WHERE 子句之前。您可以在末尾将多个WHERE 子句与AND 组合在一起。

标签: mysql join where-in


【解决方案1】:

像这样更新您的查询:

SELECT * 
FROM table_1 t1 
JOIN table_2 t2 
ON t1.t1_id  = t2.reft1_id
WHERE t1.t1_id IN ('12345223', '2343374') 
AND t2.t2_id IN ('2164158194', '3232422423')

“ON”子句必须包含在两个表中链接的两列。

【讨论】:

  • 感谢您的回答似乎我把它弄混了,这让它工作了。
【解决方案2】:

您的子句顺序搞混了。你应该去 1.)SELECT, 2.) FROMJOINs, 3.) WHERE

像这样:

SELECT * 
FROM table_1 t1 
JOIN table_2 t2 
WHERE t1.t1_id IN ('12345223', '2343374')
  AND t2.t2_id IN ('2164158194', '3232422423')

但是您的语句似乎也错过了JOIN-条件,因此它会导致错误(它在 oracle 中)或(假设 t1_id 和 t2_id 是主键)给您 4 个结果行(似乎确实如此在mysql中):

t1_id            t2_id
12345223         2164158194
12345223         3232422423
2343374          2164158194
2343374          3232422423

没有条件的JOIN 几乎永远不是您真正想要的,如果是这样,它应该在语句中明确并使用CROSS JOIN

【讨论】:

    猜你喜欢
    • 2018-01-20
    • 2020-02-14
    • 1970-01-01
    • 2015-04-27
    • 2013-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多