mysql 如何将一列中的属性值与另一列中的每个人进行比较?

How to compare an attribute value in one column with every one in anther column in mysql?

我是 mysql 的新手。 我在 Whosebug 上阅读了 this 和其他几篇文章。他们都建议使用 LIKE 但我仍然无法得到正确的结果。请问是不是信息行不同导致的问题

假设我有一个这样的表 CD:

artist        album
Prince        Purple Rain
Adam          Prince Charming

我想 select 艺术家 Prince 因为它同时出现在艺术家和专辑中,我试过使用:SELECT artist from CD WHERE album LIKE CONCAT('%', artist, '%')

但是它保持 returning 0 结果,我不明白为什么它不起作用,谁能帮助我?

编辑:关于 'TABLE CD' 的更多信息:

artist        album
Prince        Purple Rain
Adam          Prince Charming
James         Apple
Furious       Banana
Beatles       Let It Be
It            Come

它应该 return 艺术家 Prince,It

如果您想将记录集合与其他记录集合进行比较,那么 WHERE 子句中的简单 LIKE 比较是不够的。相反,您将不得不对记录进行某种聚合。如果 'Prince'artistalbum 列中出现一次或多次,则以下查询将 return 为真。

SELECT CASE WHEN EXISTS (
    SELECT * FROM yourTable
    HAVING SUM(CASE WHEN artist LIKE '%Prince%' THEN 1 ELSE 0 END) > 0 AND
           SUM(CASE WHEN album  LIKE '%Prince%' THEN 1 ELSE 0 END) > 0
) THEN "True" ELSE "False" END

此处演示:

SQLFiddle

这可能对你有帮助,试试这个

SELECT artist FROM yourTable WHERE (SELECT GROUP_CONCAT(album) FROM yourTable) LIKE CONCAT('%',artist,'%');

SQL Fiddle

GROUP_CONCAT

此函数 returns 一个字符串结果,其中包含来自一组(即来自您的查询结果)的串联非 NULL 值。如果没有非 NULL 值,它 returns NULL。

有关 GROUP_CONCAT 的更多详细信息,请参阅此 MySQL documentation and this

您可以使用相同的 table 进行左连接,然后使用您喜欢的条件来连接它们。

SELECT
   t1.artist,
   t2.album
FROM
   artists t1 
   left join
      artists t2 
      on t2.album LIKE concat('%', t1.artist, '%') 
where
   t2.album is not NULL 
group by
   t1.artist

SQLFiddle