两个表上的内连接

时间:2014-11-06 13:41:15

标签: mysql join

当我尝试进行内部联接时,我遇到了错误:#1066 - 不是唯一的表/别名:' afspraken'

以下是我的尝试:

SELECT accounts.werknemer_id, accounts.voornaam, accounts.achternaam, klanten.klant_id,  klanten.voornaam, klanten.achternaam 
FROM accounts, klanten 
JOIN afspraken ON afspraken.werknemer_id = afspraken.werknemer_id JOIN afspraken ON afspraken.klant_id = afspraken.klant_id

我想知道出了什么问题,我一直在谷歌,但他们都找不到解决方案。

感谢正手

2 个答案:

答案 0 :(得分:1)

当您使用两个表的内连接时,内连接的条件必须是两个中都存在的相同字段。此外,所选字段必须位于一个表或另一个表中,您不能只根据同一个表的同一字段将条件放入内连接。等于afspraken.werknemer_id = afspraken.werknemer_id和等于afspraken.klant_id = afspraken.klant_id导致错误。

我认为您希望加入表格accountsklanten,而afsprakenwerknemer_id字段中的klant_id表没有共同字段,所以它会是这样的:

SELECT accounts.werknemer_id,
accounts.voornaam,
accounts.achternaam,
klanten.klant_id,
klanten.voornaam,
klanten.achternaam 
FROM accounts 
INNER JOIN afspraken ON accounts.werknemer_id = afspraken.werknemer_id 
INNER JOIN klanten ON afspraken.klant_id = klanten.klant_id

答案 1 :(得分:0)

此查询的几个部分令人担忧:

  1. 逗号连接语法与内连接语法(选择1,您不能同时执行)
  2. 连接两个具有相同名称的表时没有表别名。编译器无法弄清楚要做什么。
  3. 表格之间的关系无法识别,因此返回的数据不太可能产生您尝试做的事情
  4. afspraken被添加到查询中,但不会在选择中提供什么目的?
  5. 用简单的英语描述你需要的东西。 (显示样本数据和期望的结果)
  6. SELECT accounts.werknemer_id, accounts.voornaam, accounts.achternaam, klanten.klant_id,  klanten.voornaam, klanten.achternaam 
    FROM accounts, klanten   <-- This line is the problem
    JOIN afspraken ON afspraken.werknemer_id = afspraken.werknemer_id <--or these two are (1)
    JOIN afspraken ON afspraken.klant_id = afspraken.klant_id <--(2)
    

    要解决我们需要知道帐户与klanten的关系 当你可以在连接语法上使用一个和子句时,为什么你需要两个连接才能使用...

    INNER JOIN afspraken 
      ON afspraken.werknemer_id = afspraken.werknemer_id <--or these two are (1)
     AND afspraken.klant_id = afspraken.klant_id <--(2)
    

    此外,你不是别名的别名。这也会导致问题,因为系统不知道要链接到哪个连接。

    所以要么......

    SELECT A.werknemer_id, A.voornaam, A.achternaam, K.klant_id,  K.voornaam, K.achternaam 
    FROM accounts A, klanten K, afspraken AF, afspraken AF2
    WHERE AF.werknemer_id = AF2.werknemer_id 
     AND  AF.klant_id = AF2.klant_id 
    

    虽然帐户如何与klaten OR相关

    SELECT A.werknemer_id, A.voornaam, A.achternaam, K.klant_id,  K.voornaam, K.achternaam 
    FROM accounts A
    CROSS JOIN klanten K
    CROSS JOIN afspraken AF, 
    INNER JOIN afspraken AF2
      ON AF.werknemer_id = AF2.werknemer_id 
     AND AF.klant_id = AF2.klant_id 
    

    但是我可能会把关系搞砸了,因为我不明白每个表在你的例子中如何与彼此的表相关。