如何执行此MySQL连接操作?

时间:2015-12-08 19:18:30

标签: php mysql join

我有两张表,如下;

表A

tablea

表B

tableb

在表格中,我有prodidtagid。它是一个复合主键。 prodid充当外键,指向tableb。在tableb中,我有prodidformlink。 tablea的prodid指向tableb的link。我想要的是,如果我像数组一样输入,A9rLRawV,mi9rLmZW,我想输出为;

broe4AMb
rEEtK9gt

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

SELECT p.link AS links
FROM tablea t
INNER JOIN tableb p ON t.prodid = p.link
WHERE t.tagid IN ('A9rLRawV','mi9rLmZW')
GROUP BY p.prod HAVING COUNT(*) > 1

但是,它返回结果,如;

broe4AMb
rEEtK9gt
rEEtK9Hh

但我所期望的不应该包含rEEtK9Hh。我期待结果;

broe4AMb
rEEtK9gt

这是因为,我想要的产品同时包含A9rLRawVmi9rLmZW。此处,表b中的rEEtK9Hh(或prod Bhc5y488)只有A9rLRawV,我不想要。

我该怎么做?我使用PHP + MySQL

2 个答案:

答案 0 :(得分:0)

第一种方法[求助]:

您的错误在这里:

INNER JOIN tableb p ON t.tagid = p.link

您需要将prIN与prodid一起使用,如下所示:

INNER JOIN tableb p ON t.prodid = p.link

第二种方法:

您不需要对“产品”进行分组。字段因为在表格中始终是唯一的&#39;。您需要使用&#39; link&#39;进行分组。领域。

答案 1 :(得分:0)

或者,如果您只是查看您的tableA,您可以使用MySQL中的GROUP_CONCAT()函数直接检索prodid。

例如,生成一个虚拟SELECT表,您可以在其中直接比较现有对(本例中的密钥对)。

SELECT prodid, GROUP_CONCAT(tableA.tagid) as keypair FROM `tableA` GROUP BY prodid;

会回来:

prodid    keypair
--------  -----------------
4c4fedf7  OMoy3H0a,yiWDGB4D
broe4AMb  A9rLRawV,mi9rLmZW
nhrtK9ce  yEsBoYLj
rEEtK9gt  A9rLRawV,mi9rLmZW
rEEtK9Hh  A9rLRawV,msBWz8CQ

FINAL查询可能类似于:

SELECT prodid 
   FROM (SELECT prodid, GROUP_CONCAT(tableA.tagid) as keypair FROM `tableA` GROUP BY prodid) AS T 
   WHERE keypair = 'A9rLRawV,mi9rLmZW'

返回:

prodid
--------
broe4AMb
rEEtK9gt