如何创建一个查询,在连接链接表时显示所有不同的行数据?

时间:2013-11-14 18:26:10

标签: mysql join

目前我正在尝试创建一个HTML表格,显示所有用户以及该用户是否下载了某个文件。

一个用户:

CREATE TABLE IF NOT EXISTS `users` (
  `user_id` int(8) NOT NULL AUTO_INCREMENT,
  `user_name` varchar(128) NOT NULL,
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1;

一个用于文件:

CREATE TABLE IF NOT EXISTS `files` (
  `file_id` int(8) NOT NULL AUTO_INCREMENT,
  `file_name` varchar(128) NOT NULL,
  PRIMARY KEY (`file_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1;

一个链接表,用于保存由哪个用户下载的文件:

CREATE TABLE IF NOT EXISTS `downloads` (
  `download_id` int(8) NOT NULL AUTO_INCREMENT,
  `user_id` int(8) NOT NULL,
  `file_id` int(8) NOT NULL,
  PRIMARY KEY (`download_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1;

查询

当我选择file_id 3时,我希望看到每个用户以及他们是否已下载文件。

SELECT `file_id`, `user_name`, IF(`file_id` = '3', 1, 0) as `downloaded`
FROM `users` 
NATURAL RIGHT JOIN `downloads`
WHERE `file_id` = '3'
GROUP BY `user_name`

结果

输出应该是这样的:

+----------+---------------+-------------+
| file_id  | user_name     | downloaded  |
+----------+---------------+-------------+
| 3        | John          | 1           |
| 3        | Peter         | 1           |
| 3        | Jack          | 0           |
| 3        | Michael       | 0           |
+----------+---------------+-------------+

有人能帮帮我吗?还是指出我正确的方向?

测试区域:http://sqlfiddle.com/#!2/b5f81/4

1 个答案:

答案 0 :(得分:1)

以下内容应该有效:

SELECT 3 file_id, user_name, IF(d.file_id = 3, 1, 0) downloaded 
FROM users u
LEFT JOIN downloads d ON d.user_id = u.user_id && d.file_id = 3
ORDER BY downloaded DESC