[英]How can I perform this MySQL join operation?
我有两个如下表:
桌子
桌子
在tablea中,我有prodid
和tagid
。 它是一个复合主键。 prodid
充当外键,指向tableb。 在tableb中,我具有prodid
, form
和link
。 prodid
的表A点link
表B中。 我想要的是,如果我像数组那样输入A9rLRawV,mi9rLmZW
,我希望输出为;
broe4AMb
rEEtK9gt
我有一个查询;
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
首选方法[已解决]:
您的错误在这里:
INNER JOIN tableb p ON t.tagid = p.link
您需要将prodid与JOIN一起使用,如下所示:
INNER JOIN tableb p ON t.prodid = p.link
第二种方法:
您不需要对“ prod”字段进行分组,因为在“ tableb”上始终是唯一的。 您需要使用“链接”字段进行分组。
另外,如果仅查看tableA,则可以使用MySQL中的GROUP_CONCAT()
函数直接检索产品。
例如,生成一个虚拟的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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.