将模棱两可的相同值连接到select和on

时间:2018-10-28 13:25:10

标签: mysql inner-join


INNER JOIN 遇到了一些问题。

ref_vg_ou

mplus

vignette_ou

IO

mySQL请求:

GHCi> readLn `mplus` readLn :: IO Integer
0
0
GHCi> readLn `mplus` readLn :: IO Integer
foo
1
1
GHCi> readLn `mplus` readLn :: IO Integer
foo
bar
*** Exception: user error (Prelude.readIO: no parse)

我的控制台返回错误:

  

“ id_vg”字段列表不明确

我不明白为什么我的“ id_vg”不明确?我尝试使用Alias,但是遇到了一个新错误:

id_vg | ref
  12     1
  13     1
  14     2

错误:

  

'vg.vg_id'子句未知

2 个答案:

答案 0 :(得分:1)

  • 您的示例表结构显示您没有vg_id列,但是没有id_vg列。
  • 在涉及多个表的查询的情况下,最好使用表名或定义的别名(如果有)来引用相应的列。由于两个表中都有id_vg列,因此收到“模棱两可”的列错误消息。 MySQL无法识别选择哪一个(没有给出正确的表名或别名引用)。
  • 此外,请注意:一旦在表上定义了别名,就只能使用该别名引用其列。

请尝试以下操作:

SELECT vg.id_vg, vg.ou_name, vg.ou_info
FROM vignette_ou AS vg
INNER JOIN ref_vg_ou AS ref
  ON vg.id_vg = ref.id_vg
WHERE ref.ref = ?

答案 1 :(得分:0)

由于要在ON子句中连接两个相同名称的列,因此可以将替代JOIN语法与 USING 以及匹配列用于JOIN条件(documentation )。这也将不需要表别名来标识SELECT中的id_vg来自哪个表。

所以

SELECT id_vg, ou_name, ou_info
FROM vignette_ou
INNER JOIN ref_vg_ou USING (id_vg)
WHERE ref = ?  

在这里也可以使用。