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'
在 artist
和 album
列中出现一次或多次,则以下查询将 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
此处演示:
这可能对你有帮助,试试这个
SELECT artist FROM yourTable WHERE (SELECT GROUP_CONCAT(album) FROM yourTable) LIKE CONCAT('%',artist,'%');
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
我是 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'
在 artist
和 album
列中出现一次或多次,则以下查询将 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
此处演示:
这可能对你有帮助,试试这个
SELECT artist FROM yourTable WHERE (SELECT GROUP_CONCAT(album) FROM yourTable) LIKE CONCAT('%',artist,'%');
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