我是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
它应该返回艺术家Prince
,It
答案 0 :(得分:1)
这可能会对你有所帮助,试试这个
GROUP_CONCAT
<强> GROUP_CONCAT 强>
此函数返回一个字符串结果,其中包含来自组的连接非NULL值(即来自查询结果)。如果没有非NULL值,则返回NULL。
有关{{1}}的详细信息,请参阅此MySQL documentation和this
答案 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
在这里演示:
答案 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