生成MQsql查询以获取记录

时间:2019-04-17 04:26:44

标签: mysql

我在下表中说“ A”

"column1"   "column2"
   1         arafath@gmail.com
   2         ram@gmail.com;arafath@gmail.com
   3         tom@gmail.com

我要获取具有以下条件的记录。

条件1:       如果该列值存在于任何行中,它将检索匹配的行

条件2:
      如果列值与任何行都不匹配,则它希望检索所有行

  Eg: column2 = "ram@gmail.com"
  Output should be "row 2"

  Eg: column2 = "arafath@gmail.com"
  Output should be "row 1, row 2"

  Eg: column2 = "xxx@gmail.com" (Unmatched column)
  Output should be all the rows (row 1, row 2, row 3)

请帮助我解决问题。

谢谢。

2 个答案:

答案 0 :(得分:0)

我们可以在这里尝试使用工会:

SELECT col1, col2
FROM yourTable
WHERE col2 REGEXP '[[:<:]]ram@gmail.com[[:>:]]'
UNION ALL
SELECT col1, col2
FROM yourTable
WHERE col2 NOT REGEXP '[[:<:]]ram@gmail.com[[:>:]]' AND
    NOT EXISTS (SELECT 1 FROM yourTable WHERE col2 REGEXP '[[:<:]]ram@gmail.com[[:>:]]');

Demo

上述策略是联合的前半部分返回匹配记录(如果存在)。然后,联合的后半部分将返回所有其他记录,但前提是在联合的前半部分中找到匹配的记录。如果找到了匹配项 ,则联合后半部分的WHERE子句将失败,并且不返回任何内容。

此外,请注意,在MySQL表中存储逗号分隔(或分号分隔)的数据通常是不明智的做法。我必须使用REGEXP来解决此问题,但是理想情况下,如果每封电子邮件都有单独的一行,我们只需要使用=相等。

答案 1 :(得分:0)

请尝试以下一种。

SELECT col1, col2
FROM yourTable 
where ( not exists (Select col2
FROM yourTable where col2 like 'xxx@gmail.com') 
or col2 like 'xxx@gmail.com');