即使某些引用为NULL,也会对数据进行排序

时间:2013-10-28 22:40:38

标签: mysql sql database null sql-order-by

我想在名字后面订购我的结果。因此需要多个表格。现在我遇到的问题是,即使列中有null,我也要对名称进行排序。下面是一个代表问题的示例数据库:

我的表格

CREATE TABLE IF NOT EXISTS `products` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `desc` varchar(255) NOT NULL,
  `price` decimal(10,0) NOT NULL,
  `manufacturer_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

CREATE TABLE IF NOT EXISTS `manufacturer` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `desc` varchar(255) NOT NULL,
  `website` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

我的数据:

INSERT INTO `products` (`id`, `desc`, `price`, `manufacturer_id`) VALUES
(1, 'book', 12, 1),
(2, 'cup', 4, 2),
(3, 'Arbitrary product', 100, NULL);

INSERT INTO `manufacturer` (`id`, `title`, `desc`, `website`) VALUES
(1, 'Publisher', 'Lorem ipsum', 'www.stackoverflow.com'),
(2, 'Cup producer', 'Lorem ipsum', 'www.cup.com');

如果我做SELECT * FROM products,我会得到三个结果。如果我想订购它,我有一个像

这样的查询
SELECT p.desc, p.price, m.title
FROM products p, manufacturer m
WHERE p.manufacturer_id = m.id
ORDER BY m.title

由于null中的products值,我只得到了两个结果。是否可以在制造商标题后对表products进行排序,即使其中有null

2 个答案:

答案 0 :(得分:1)

使用LEFT JOIN

试试这个:

SELECT p.desc, p.price, m.title
FROM products p LEFT OUTER JOIN manufacturer m
ON p.manufacturer_id = m.id
ORDER BY m.title

答案 1 :(得分:1)

你说p.manufacturer_id = m.id你加入了 但你没有指定它,所以默认情况下它是一个内连接, 您想要左边的连接,其中“左”表是产品表

SELECT p.desc, p.price, m.title
FROM products AS p
LEFT JOIN manufacturer AS m ON m.id = p.manufacturer_id
ORDER BY m.title

查看此图片以便更好地理解 http://www.codeproject.com/KB/database/Visual_SQL_Joins/Visual_SQL_JOINS_V2.png