MySQL:WHERE 子句中的 LIKE 通配符

标签 mysql database select inner-join wildcard

我从 MySQL 数据库中选择数据,并尝试将 WHERE column_name = 'name' 替换为 WHERE column_name LIKE '%name%' 等通配符。
听起来太简单了,对吧?

原始代码(完美运行)如下所示:

SELECT DISTINCT a.title_id, a.artist_id, fe_title.title, fe_artist.artist
FROM fe_title_artist AS a 
INNER JOIN fe_title ON a.title_id = fe_title.id
INNER JOIN fe_artist ON a.artist_id = fe_artist.id
INNER JOIN fe_title_artist AS b 
WHERE a.title_id=b.title_id 
and b.artist_id=(SELECT id FROM fe_artist WHERE artist = 'Patrick Duffy')

我尝试过但失败的内容如下所示:

SELECT DISTINCT a.title_id, a.artist_id, fe_title.title, fe_artist.artist
FROM fe_title_artist AS a 
INNER JOIN fe_title ON a.title_id = fe_title.id
INNER JOIN fe_artist ON a.artist_id = fe_artist.id
INNER JOIN fe_title_artist AS b 
WHERE a.title_id=b.title_id 
and b.artist_id=(SELECT id FROM fe_artist WHERE artist LIKE '%Patrick%')

没有关于此的结果。

where 子句中的通配符是否太多了?是自连接导致了问题吗?有没有办法以不同的方式编码?我是不是傻了?

我希望有人能帮助我。谢谢。

最佳答案

这是由于子查询返回超过 1 行。请使用下面的查询。

SELECT DISTINCT a.title_id, a.artist_id, fe_title.title, fe_artist.artist
FROM fe_title_artist AS a 
INNER JOIN fe_title ON a.title_id = fe_title.id
INNER JOIN fe_artist ON a.artist_id = fe_artist.id
INNER JOIN fe_title_artist AS b 
WHERE a.title_id=b.title_id 
and b.artist_id IN (SELECT id FROM fe_artist WHERE artist LIKE '%Patrick%')

关于MySQL:WHERE 子句中的 LIKE 通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48256631/

相关文章:

php - 如何在 WordPress 中设置 Widgetkit 插件的数据库?

mysql - mysql中从多个表插入到一个表

php - 我如何在创建查询时检查 mysql 数据库表字段值?

c - 将 m32 标志添加到 Makefile 时 select() 失败

php - 对连接中的选择结果进行计数

sql - 解释分析语句中的循环是什么意思?

java - 在没有 Hibernate 的 Spring 桌面应用程序中添加 mysql 和 spring 数据的 spring 4 配置 [java onfig] 和 Maven 依赖项是什么?

php - 连接到亚马逊服务器上的远程数据库

mysql - 更有效地存储逗号分隔的字符串

php - 将项目上传到服务器时出现一些错误