繁体   English   中英

如何执行此MySQL连接操作?

[英]How can I perform this MySQL join operation?

我有两个如下表:

桌子

桌子

桌子

桌子

在tablea中,我有prodidtagid 它是一个复合主键。 prodid充当外键,指向tableb。 在tableb中,我具有prodidformlink 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

这是因为,我想要同时具有A9rLRawVmi9rLmZW 在这里,表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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM