java - 使用联接将表 2 和表 3 中的数据添加到表 1 时出现 MySQL 查询问题

标签 java mysql sql foreign-keys inner-join

我在 MySQL 中的查询遇到问题,我已经在很多地方寻找答案。 我想要的是将数据插入表 1 的第 2 列和第 3 列,以及表 2 和表 3 的第 2 列和第 2 列中的数据。

我有下表。

Table1 (products):
Column1 = productId (Autoincrementing int)
Column2 = fkCategory (int, Foreign key pointing to the categoryId)
Column3 = fkBrand (int, Foreign key pointing to the brandId)

Table2 (categories):
Column1 = categoryId (autoincrementing int)
Column2 = category (Varchar)

Table3 (brands):
Column1 = brandId (Autoincrementing int)
Column2 = brand (Varchar)

当我进行以下查询时,一切正常,它在表 1 的第 1 列(自动增量键)和第 2 列(我想要的数据)中插入了一行数据,但在第 3 列中没有任何数据:

INSERT INTO products (fkCategory)
Select categories.categoryId
FROM categories
WHERE category = 'Bluser';

现在,我想使用表 2 和表 3 中的数据在同一查询内向表 1 中同一行的第 2 列和第 3 列添加一个值,并尝试进行以下查询。这给了我一条消息:未知列“products.fkBrand”

INSERT INTO products (fkCategory, fkBrand)
Select categories.categoryId, brands.brandId
FROM categories
INNER JOIN brands ON brands.brandId = products.fkBrand
WHERE category = 'Bluser' and brand = 'Ganni';

我还尝试了以下查询:

INSERT INTO products (fkCategory, fkBrand)
Select categories.categoryId, brands.brandId
FROM products
INNER JOIN categories ON categories.categoryId = products.fkCategory
INNER JOIN brands ON brands.brandId = products.fkBrand
WHERE category = 'Bluser' and brand = 'Ganni';

这个在运行时没有给我带来任何复杂性,但不会向 table1 添加任何值。

我有点迷失了,我想我的问题出在Where子句或我加入它的方式上。我尝试了很多其他查询,但我不想在问题线程中添加太多代码。

非常感谢任何帮助:)。美好的一天!

最佳答案

您不应该加入表产品,因为在插入之前表是空的并且会导致空集。以下查询执行表 2 和表 3 的交叉联接,生成要插入到产品中的结果集:

INSERT INTO products (fkCategory, fkBrand)
Select c.categoryId, b.brandId
FROM categories c,brands b
WHERE c.category = 'Bluser' and b.brand = 'Ganni';

关于java - 使用联接将表 2 和表 3 中的数据添加到表 1 时出现 MySQL 查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23698151/

相关文章:

mysql - 只在表为空时插入

mysql - 如何使用另一个计算平均值的查询的结果更新MySQL表

java - 使用 Eclipse 调试器调试 Eclipse CDT 时出现奇怪的行为

java - 从 HippoCMS 中的 ServletFilter 访问 ChannelInfo 和 ResourceBundle

java - 在 GWT 应用程序中处理授权

mysql - 如果找不到记录,如何通过扩展模型对 Rails 中的存档进行额外搜索?

mysql - 使用 DATEDIFF 忽略 MYSQL 中的负值

MySQL 将 View 列从 BIGINT 更改为 BIT

C#自定义数据库引擎,如何实现SQL

java - 如何将对象从 View 传递到java函数?