我有两张表,如下;
表A
表B
在表格中,我有prodid
和tagid
。它是一个复合主键。 prodid
充当外键,指向tableb。在tableb中,我有prodid
,form
和link
。 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
这是因为,我想要的产品同时包含A9rLRawV
和mi9rLmZW
。此处,表b中的rEEtK9Hh
(或prod Bhc5y488
)只有A9rLRawV
,我不想要。
我该怎么做?我使用PHP + MySQL
答案 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