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

时间:2016-11-29 08:04:50

标签: php mysql multiple-columns

我是mysql的新手。 我已经在stackoverflow上阅读了this和其他几个。他们都建议使用LIKE,但我仍然无法得到正确的结果。我想知道问题是否是由包含信息的不同行引起的。

假设我有一个像这样的CD

artist        album
Prince        Purple Rain
Adam          Prince Charming

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

但是它一直在返回0结果,我不明白为什么它不起作用,任何人都可以帮助我?

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

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

它应该返回艺术家PrinceIt

3 个答案:

答案 0 :(得分:1)

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

GROUP_CONCAT

SQL Fiddle

<强> GROUP_CONCAT

此函数返回一个字符串结果,其中包含来自组的连接非NULL值(即来自查询结果)。如果没有非NULL值,则返回NULL。

有关{{1}}的详细信息,请参阅此MySQL documentationthis

答案 1 :(得分:0)

如果要将记录集合与其他记录的集合进行比较,那么LIKE子句中的简单WHERE比较就不够了。相反,您将不得不跨记录进行某种聚合。如果'Prince'artist列中album出现一次或多次,则以下查询将返回true。

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

答案 2 :(得分:0)

您可以使用同一个表格进行左连接,并使用您喜欢的条件加入它们。

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