MySql,连接表 WHERE IN()

标签 mysql join where-clause

我这里有两个表和结构:

CREATE TABLE `users` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(50) NOT NULL,
  `membership` varchar(12) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


CREATE TABLE `memberships` (
  `id` int(1) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(30) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;



INSERT INTO `memberships` (`id`, `title`) VALUES
(1,  'Basic'),
(2,  'Bronze'),
(3,  'Gold'),
(4,  'Platinum');

INSERT INTO `users` (`id`, `username`, `membership`) VALUES
(1,  'john', '0'),
(2,  'mike', '1,2'),
(3,  'peter', '3,4'),
(4,  'jane', '3'),
(5,  'rick', '1,2,3');

我需要连接两个表并使用 IN 函数列出所有用户及其成员资格。

这是我尝试过的,但我无法以这种方式连接表:

SELECT 
  *.u
  m.title AS title 
FROM
  `users` AS u 
  LEFT JOIN `memberships` AS m 
    WHERE m.id IN(u.membership)
ORDER BY u.username; 

我想要的是这样的:

username              membership
=====================================
john                  null
mike                  Basic, Bronze
peter                 Gold, Platinum
jane                  Gold
rick                  Basic, Bronze, Gold

我也创建了 SQL fiddle:http://sqlfiddle.com/#!9/39b6e1

最佳答案

这个怎么样?

SELECT 
  u.*,
  GROUP_CONCAT(m.title SEPARATOR ', ') as memberships
FROM
  `users` AS u 
  LEFT JOIN `memberships` AS m 
    ON FIND_IN_SET(m.id, u.membership)
GROUP BY u.username
ORDER BY u.username 

给你:

id  username    membership  memberships
4   jane        3           Gold
1   john        0           (null)
2   mike        1,2         Bronze, Basic
3   peter       3,4         Gold, Platinum
5   rick        1,2,3       Basic, Bronze, Gold

Updated SQL Fiddle

关于MySql,连接表 WHERE IN(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38363279/

相关文章:

c# - LINQ 中的左外连接

hadoop - 在MapReduce中联接两个具有多个值的数据集

php - mysql 倍数和条件

MySQL IN 条件子查询

php - 无法使用 "WHERE s_id IN ($array)"在 mysql 中选择项目

php - 格式化多个 SQL 列或在 php 中执行

php - 更新员工的数据库列及其加入日期

mysql - 多个 'IN' 子句

php - PHP中使用外键的正确方法

mysql - hibernate连接表mysql