我怀疑在之前的搜索中尝试加入两个表格。我看了几个解决方案并阅读了一本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
但这不是我想要的,我只想要与前一个查询相同的两个结果,但是加入两个表的结果的所有列...
我知道有很多这样的问题,但我已经尝试了很多东西,但仍然没有达到预期的结果..
我错过了什么?
谢谢你,如果你有任何问题或疑问,请问:)
答案 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