【问题标题】:Join tables with one known variable in second table在第二个表中加入一个已知变量的表
【发布时间】:2013-01-11 09:02:00
【问题描述】:

我的 SQL 查询有问题。

情况如下:

我有两张桌子,A 和 B。

表 A:

---------------------------------------------
*| A.id  |  A.t_id  |  A.f_id  |  A.type    |*
---------------------------------------------
 |   1   |    32    |     3    |   Loading  |
 |   2   |    34    |     5    |  Discharge |
 |   3   |    32    |     3    |  Discharge |
---------------------------------------------

表 B:

-----------------------
*| B.id  | B.shipid |*
-----------------------
 |   1   |    1     |
 |   2   |    1     |
 |   3   |    2     |
-----------------------

我需要来自 A 的所有行,其中 A.type=Loading, A.t_id 是 B.id -> B.shipid=2 和 .到目前为止,我的查询是:

SELECT *  FROM A, B WHERE  (A.type='Loading' AND B.shipid=2 AND A.t_id=B.id)

但这不会返回正确的记录(实际上没有),而数据应该适合查询。我的查询哪里出错了?

【问题讨论】:

  • 您为什么期待结果? 3234怎么能等于123
  • 不应该是where A.f_id = B.id吗?
  • 我强烈建议您花一些时间来掌握 ANSI 标准连接语法。在FROM 子句中列出表会导致彻底的灾难,因为您无法将连接条件与WHERE 子句中的过滤条件区分开来。
  • +1 @DMK 似乎是这样.. 查看示例数据.. 以及 ypercube..

标签: mysql sql join left-join


【解决方案1】:

试试这个::

SELECT 
*  
FROM 
A
INNER JOIN B ON A.t_id=B.id

WHERE  A.type='Loading' AND B.shipid=2

【讨论】:

  • 为什么这会从 OP 的查询中返回任何不同的结果?
  • 我完全不知道为什么我的查询不起作用,但确实如此!非常感谢,我已接受答案! :)
【解决方案2】:

试试这个

SELECT * FROM A a JOIN B b ON a.t_id = b.id WHERE b.shipid = 2 AND a.type = 'Loading'
-- a and b are aliases for A and B. If you have any bigger table names, it's useful

你应该查找SQL JOINhttp://www.w3schools.com/sql/sql_join.asp

【讨论】:

    【解决方案3】:

    如果您需要 A 中的所有行,那么这听起来像是左连接...所以无论如何也请提供您的预期结果以确认..

    SELECT A.*  FROM A
    INNER JOIN B 
    ON A.f_id=B.id
    AND A.type='Loading' AND B.shipid=2
    ;
    

    由于您有条件获取加载记录,唯一的问题是 id 与上述 cmets 指出的不匹配..

    【讨论】:

      猜你喜欢
      • 2015-11-03
      • 1970-01-01
      • 1970-01-01
      • 2017-08-07
      • 1970-01-01
      • 1970-01-01
      • 2013-05-31
      • 1970-01-01
      • 2016-02-05
      相关资源
      最近更新 更多