mysql - 使用列值作为 IN MySql 的子句

标签 mysql

我不明白为什么这不起作用,我有一个列,我在我的“Mysql”数据库中存储以逗号分隔的值,然后我想连接两个表以获得结果。例如:

SELECT *
FROM users u INNER JOIN
     groups g
     ON u.id IN ( g.ownerId )
WHERE u.active='1' AND g.gid='15';  

g.ownerId在这个senerio中的值为'175,178'。

出于某种原因,这只会返回 ownerId 175 的连接结果。但是如果我在 IN 子句中手动输入值 ( 175, 178 ),则会显示两行。为什么不使用 ownerId 列中的两个值?

我试过这个来“分离”值或强制一个“列表”,但它没有用...... SELECT * FROM users u INNER JOIN groups g ON u.id IN ( SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(g.ownerId, ',', 1), ' ', -1) as x, SUBSTRING_INDEX(SUBSTRING_INDEX(g.ownerId, ',', 2), ' ', -1) as y ) where g.groupId='15'

有没有人以前遇到过这种情况或知道该怎么办?

最佳答案

它不起作用,因为 in 值由一个列表组成,其中有一个元素恰好有一个逗号。它相当于:

on uid = '175,178'

您可以将逻辑替换为 find_in_set():

on find_in_set(uid, g.id) > 0

但是,您真的应该了解联结表以及为什么您的数据结构糟糕、糟糕、糟糕:

  • 您将数字存储为字符串。
  • 您有外键关系,但无法声明它们。
  • 您不恰本地使用了字符串操作。
  • 您的查询不能使用索引。

修复数据结构。

关于mysql - 使用列值作为 IN MySql 的子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36535040/

相关文章:

在复制表中的行时更新所需的 MySQL 特殊 INSERT/SELECT 语句

mysql - 在 Ubuntu16 上设置 nginx、phpmyadmin 和 mysql 后, Node 应用程序无法连接到数据库

mysql - 如何在 MySQL 中获取行出现值?

mysql - 为什么这两个结果集没有相加?

php - FPDF单元格定位

c# - MySQL C# 查找某个最大距离内的 Lat Lon 条目

php - 在 Laravel 中使用 request->all 保存所有记录记录

php - 如何用静态值动态替换产品名称

java - 我的关于Mysql和JAVA的代码有什么问题

MySQL/phpMyAdmin : remove all the rows less 3 concrete