从两个表mysql加入

时间:2014-11-17 15:23:35

标签: mysql sql join

我怀疑在之前的搜索中尝试加入两个表格。我看了几个解决方案并阅读了一本mysql书中的一些章节,但我认为我非常接近正确的答案,但仍然没有得到它

我有这个表“userprocess”:

idProcess          username         state
------------------------------------------
1                  blisssing        3
2                  enriquecalvera   1
2                  africabaluja     2
1                  enriquecalvera   3
2                  blisssing        1 

此表的主要键是idProceso + username的联合。

我有另一张表“user”:

index      username        pass            active      tipeUser     .... so on
-----------------------------------------------------------------   ----
1          blisssing       6OiZVVUPi3LDE   1           user
2          carmen          6OOtfrXB2Nu5.   1           user 
3          consuelo        6OgdhVSkr1VDs   1           user
4          africabaluja    6OoPtGjWMQARE   1           user
5          enriquecalvera  6O6tvHg.122uQ   1           user

问题是我想显示两个表的连接,但在第一个表中搜索。如果我运行此查询

SELECT username FROM userprocess where idProcess='1' ORDER BY state

我明白了:

username
---------
blisssing
enriquecalvera

这是我正在寻找的,但我想在“user”表中显示idProceso订购的那些用户名的所有字段。所以我运行另一个查询:

SELECT *
FROM
  user u,
  userprocess p
WHERE
  u.username=p.username
  AND u.username IN (
    SELECT username 
    FROM userprocess 
    where idProcess='1'
    ORDER BY username
) ORDER BY p.state

我明白了:

username        pass           active   tipeUser   idProcess    state
----------------------------------------------------------------------
blisssing       6Od3nSkfOiwlg  1        user       2            1 
enriquecalvera  6Oc9usiDEk51U  1        user       2            1
enriquecalvera  6Oc9usiDEk51U  1        user       1            3
blisssing       6Od3nSkfOiwlg  1        user       2            3

但这不是我想要的,我只想要与前一个查询相同的两个结果,但是加入两个表的结果的所有列...

我知道有很多这样的问题,但我已经尝试了很多东西,但仍然没有达到预期的结果..

我错过了什么?

谢谢你,如果你有任何问题或疑问,请问:)

1 个答案:

答案 0 :(得分:1)

您看到多个结果的原因是因为您只加入了用户名,但当然用户进程表有2行username = enriquecalvera。您的子查询只是正确地返回您感兴趣的1行(idprocess = 1),但由于您的联接与此分开,因此不包含idprocess = 1条件,您将获得两者排回来。

你应该只用一个这样的连接一步完成这个:

SELECT *
FROM
  user u
INNER JOIN userprocess p on u.username=p.username and p.idProcess='1'
ORDER BY p.state