加入2个使用LIKE作为公共标识符的表

时间:2017-10-23 16:59:32

标签: mysql sql

我有两张桌子。

wp_rg_lead_detail:    

id       lead_id    form_id    field_number    value
=====================================================
166649   2579       4          235             batman
167324   2602       4          235             batman
168439   2579       4          235             kelsey
169221   2836       4          235             batman

wp_rg_incomplete_submissions:

uuid                form_id   submission
=======================================================================
fds4389dsd2kjd      4         JSON entry that doesn't contain 'kelsey
ciwod2938slsck      4         JSON entry that contains 'kelsey
392copaa234jfl      4         JSON entry that doesn't contain 'kelsey

我想要做的是抓住以下记录:

  • 有“凯尔西”这个词。在 wp_rg_incomplete_submissions.submission
  • wp_rg_incomplete_submissions.form_id 为4
  • 有“凯尔西”这个词。作为中的 wp_rg_lead_detail
  • wp_rg_lead_details 中该条目的 lead_id 也应该包含' batman'对于

两个表之间唯一的标识符是“凯尔西”这个词。但是在 wp_rg_lead_detail 中存在的地方, lead_id 还必须有一个带有&#39>蝙蝠侠的的条目。

我尝试了子查询和连接,但我无处可去。有人可以指出我正确的方向吗?

更新 从下面的反馈来看,听起来我应该创建一个别名,然后将它们加入到两者中存在的位置。我在这里:

SELECT *, 'kelsey' AS myvalue
   FROM `wp_rg_lead_detail`
WHERE (`value` LIKE 'batman'
   OR `value` LIKE 'kelsey') 
   AND `form_id` = 4
GROUP BY `lead_id`
HAVING count(*) > 1

我想我不得不加入这个LIKE使用myvalue的地方:

SELECT *, uuid 
   FROM `wp_rg_incomplete_submissions` 
WHERE `form_id` = 4 
   AND `submission` LIKE concat_ws(";", "%", myvalue, "%") 

更新#2

在继续为此努力之后,我提出了:

SELECT *
FROM wp_rg_lead_detail 
INNER JOIN wp_rg_incomplete_submissions ON wp_rg_lead_detail.value 
LIKE CONCAT('%', wp_rg_incomplete_submissions.submission, '%')
WHERE wp_rg_lead_detail.value = 'kelsey' 

我知道我做错了,因为没有结果。但我觉得它比我开始时更接近。

1 个答案:

答案 0 :(得分:2)

所以这就是我想出来的,而不是保证它的效率,因为我没有写太多的SQL。

SELECT *
  FROM submissions
  JOIN (SELECT detail.*
          FROM detail
          JOIN detail detail2
            ON detail2.lead_id = detail.lead_id
         WHERE detail.value = 'kelsey'
           AND detail2.value = 'batman'
       ) as detailjoin
    ON detailjoin.form_id = submissions.form_id
 WHERE submissions.submission LIKE '%kelsey%'
   AND submissions.form_id = 4;

您的数据集返回:

'ciwod2938slsck'  4  'JSON with kelsey'   168439     2579   4   235  'kelsey'

因此,要将其细分,内部联接查询会将detail'kelsey'作为value,其中lead_id也存在于'batman'行中{1}} value

外部查询会在form_id

中选择4 'kelsey'submission的所有行

然后它只是加入form_id = form_id上的两个。

我相信这可以满足您的需求,尽管小数据集不是正面的。