MySQL 中的左联接返回空值,而它们不应该返回



所以我正在用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 中"打印"一个表格时,该表格仅包含"显示"表中显示的文本和分配的颜色代码,所有颜色代码都返回为 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返回语法错误...我做错了什么?

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

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

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

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

查询 2 中,不明白为什么要在连接条件下使用强制转换

相关内容

  • 没有找到相关文章