MySQL中的Left Join返回null值,而它们不应该返回

时间:2018-04-12 10:59:21

标签: mysql join null

所以我正在用MySQL编写一个小型学校项目。一般的想法是有一个简单的网站,以html方块显示文本,其中有关它们的数据来自数据库(显示的文本和方块的背景颜色)。

我现在的代码如下:

带正方形的表格:

CREATE TABLE `display` (
  `display_id` int(50) NOT NULL,
  `showcased_text` varchar(50) NOT NULL,
  `assigned_color` int(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

带颜色的表格:

CREATE TABLE `kolory` (
  `color_id` int(50) NOT NULL,
  `color_name` varchar(50) NOT NULL,
  `color_code` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

还有一个代码可以在这两个表之间建立关系:

ALTER TABLE `display`
  ADD CONSTRAINT `display_ibfk_1` FOREIGN KEY (`assigned_color`) REFERENCES `colors` (`color_id`);
COMMIT;

到目前为止它运作良好...... 但是,当我尝试在PHPMyAdmin中“打印”一个表时,该表只包含“display”表中显示的文本并分配了颜色代码,所有颜色代码都返回为NULL。

The code looks like that:
SELECT display.showcased_text, colors.color_code
FROM display
  LEFT JOIN colors ON display.assigned_color = colors.color_code

我也像这样尝试使用CAST:

SELECT display.showcased_text, colors.color_code
FROM display
  LEFT JOIN colors ON cast(display.assigned_color as VARCHAR(50)) = colors.color_code

然后MySQL返回语法错误......我做错了什么?

2 个答案:

答案 0 :(得分:1)

您正试图加入color_code表中的colors字段。相反,它应位于color_id表中的colors字段上。

SELECT display.showcased_text, colors.color_code
FROM display
  LEFT JOIN colors ON display.assigned_color = colors.color_id

答案 1 :(得分:0)

在查询1中,您使用了错误的条件加入

SELECT display.showcased_text, colors.color_code
FROM display
  LEFT JOIN colors ON display.assigned_color = colors.color_id

在查询2中,不清楚为什么在连接条件中使用强制转换