如何执行两个表的MySQL JOIN操作?我有一个查询,这是不正确的

时间:2015-12-09 06:26:16

标签: mysql join

我有两张表,如下;

表A

tablea

4c4fedf7    OMoy3Hoa
4c4fedf7    yiWDGB4D
broe4AMb    A9rLRawV
broe4AMb    mi9rLmZW
nhrtK9ce    yEsBoYLj
rEEtK9gt    A9rLRawV
rEEtK9gt    mi9rLmZW
rEEtK9Hh    A9rLRawV
rEEtK9Hh    msBWz8CQ

表B

tableb

mr23wsSW    formb   4c4fedf7
OBqSU9pm    forma   broe4AMb
UvYOMvLe    formc   broe4AMb
Bhc5yfr4    forma   nhrtK9ce
R9vZJ5Kd    formb   nhrtK9ce
Bhc5y629    forma   rEEtK9gt
Bhc5y488    forma   rEEtK9Hh
Bhc5y489    formb   rEEtK9Hh

在表格中,我有prodidtagid。它是一个复合主键。 prodid充当外键,指向tableb。在tableb中,我有prodformlink。 tablea的prodid指向tableb的link。我想要的是,如果我将tablea的tagid作为数组之类的输入,比如A9rLRawV,mi9rLmZW,我希望输出为;

OBqSU9pm
UvYOMvLe
Bhc5y629

这是因为,我想要prod,它在表格中的相应条目(prodid)中同时包含A9rLRawVmi9rLmZW

我有一个像<; p>这样的查询

SELECT b.prod AS links
FROM tablea a
INNER JOIN tableb b ON a.prodid = b.link
WHERE a.tagid IN ('A9rLRawV','mi9rLmZW')
GROUP BY b.prod

但是,它返回结果,如;

OBqSU9pm
Bhc5y629
Bhc5y488

我该如何解决这个问题?我使用PHP + MySQL。

2 个答案:

答案 0 :(得分:3)

在标记时,您错过了表格中的一个条目:

enter image description here

因此,与prodid rEEtK9Hh对应的条目也将显示。

但这应该是你期望的结果:

SELECT b.prod AS links
FROM tablea a
RIGHT JOIN tableb b ON a.prodid = b.link
WHERE a.tagid IN ('A9rLRawV','mi9rLmZW')
GROUP BY b.prod

输出:

|     prod |
|----------|
| BHc5y488 |
| BHc5y489 |
| BHc5y629 |
| OBqSU9pm |
| UvYOMvLe |

请参阅:http://sqlfiddle.com/#!9/6e875/2

答案 1 :(得分:0)

在你的表中,一个表应该有一个主键,例如表一个集prodid作为主键,所以不允许重复记录,所以在表b之后,链接作为外键工作,你将得到结果