Mysql возвращаемое значение как 0 в результате выборки - PullRequest
1 голос
/ 17 мая 2010

У меня есть эти две таблицы,

-- 
-- Table structure for table `t1`
-- 

CREATE TABLE `t1` (
  `pid` varchar(20) collate latin1_general_ci NOT NULL,
  `pname` varchar(20) collate latin1_general_ci NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

-- 
-- Dumping data for table `t1`
-- 

INSERT INTO `t1` VALUES ('p1', 'pro1');
INSERT INTO `t1` VALUES ('p2', 'pro2');

-- --------------------------------------------------------

-- 
-- Table structure for table `t2`
-- 

CREATE TABLE `t2` (
  `pid` varchar(20) collate latin1_general_ci NOT NULL,
  `year` int(6) NOT NULL,
  `price` int(3) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

-- 
-- Dumping data for table `t2`
-- 

INSERT INTO `t2` VALUES ('p1', 2009, 50);
INSERT INTO `t2` VALUES ('p1', 2010, 60);
INSERT INTO `t2` VALUES ('p3', 2007, 200);
INSERT INTO `t2` VALUES ('p4', 2008, 501);

мой запрос

SELECT *
FROM `t1`
LEFT JOIN `t2` ON t1.pid = t2.pid

Получение результата,

pid     pname   pid     year    price
p1      pro1    p1    2009    50
p1      pro1    p1    2010    60
p2      pro2    NULL    NULL    NULL

Мой вопрос: я хочу получить значение цены 0 вместо NULL. Как я могу написать запрос для получения значения цены 0.

Заранее спасибо за помощь.

1 Ответ

3 голосов
/ 17 мая 2010

вам нужно использовать IFNULL

SELECT pid,pname,pid,year,IFNULL(price,0)
  FROM `t1`
  LEFT JOIN `t2` 
    ON (t1.pid = t2.pid)

IFNULL (field_to_test, value_to_show) вернет 'value_to_show', когда поле 'field_to_test' равно нулю, когда field_to_test не равно нулю, оно возвращается напрямую.

...