MySQL插入到。。。SELECT-如何确定哪些SELECT子句导致NULL?

MySQL插入到。。。SELECT-如何确定哪些SELECT子句导致NULL?,mysql,select,insert,Mysql,Select,Insert,我正在尝试将一行插入到引用其他表中键的表中。在某些情况下,插入/选择将失败,因为所选值不能为null。我想知道哪些选择失败,以便根据需要在其他表中创建必要的行 以下示例有点做作,但应说明此处的挑战: CREATE TABLE TableOne ( TableOneId INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, Value VARCHAR(64) NOT NULL ) ENGINE=InnoDB; CREATE TABLE Tab

我正在尝试将一行插入到引用其他表中键的表中。在某些情况下,插入/选择将失败,因为所选值不能为null。我想知道哪些选择失败,以便根据需要在其他表中创建必要的行

以下示例有点做作,但应说明此处的挑战:

CREATE TABLE TableOne
(
  TableOneId INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  Value VARCHAR(64) NOT NULL
) ENGINE=InnoDB;

CREATE TABLE TableTwo
(
  TableTwoId INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  Value VARCHAR(64) NOT NULL
) ENGINE=InnoDB;

CREATE TABLE DependentTable
(
  DependentId INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  TableOneId INT UNSIGNED NOT NULL,
  TableTwoId INT UNSIGNED NOT NULL,
  Value FLOAT NOT NULL,
  FOREIGN KEY (TableOneId) REFERENCES TableOne(TableOneId),
  FOREIGN KEY (TableTwoId) REFERENCES TableOne(TableTwoId)
) ENGINE=InnoDB;

INSERT INTO DependentTable (Value, TableOneId, TableTwoId) SELECT 1.0, TableOne.TableOneId, TableTwo.TableTwoId FROM TableOne,TableTwo WHERE TableOne.Value='TableOneValue' AND TableTwo.Value='TableTwoValue';

Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0
如果“TableOneValue”或“TableTwoValue”不存在,则select将返回null并插入0行-如预期的那样。然而,我希望得到一些其他信息,让我能够确定哪些价值不存在,这样我就可以创建它

问题是,至少在我的实际情况中,盲目地创建每个值来满足外键引用将是过分的/昂贵的,因为有多个外键,并且其中一些依赖表将具有其他必需的依赖项。我想更明智地处理它,并确定哪些引用不存在,而只创建那些引用

我可以尝试一个接一个地在依赖表中创建行,等待实际插入一行(而不是得到一个重复的条目),然后再次尝试原始插入-但感觉应该有更好/更优雅的方法来执行此操作


提前感谢您的任何建议/想法…

我要做的是在没有外键的情况下将所有内容插入到中间表中。然后使用该表查询TableOne和TableTwo,查看TableOneId和TableTwoId中的哪些项在TableOne和TableTwo中不存在。然后调整、清理等

插入中间表(DependentId、,
TableOneId,
TableTwoId,
值)诸如此类诸如此类

以下内容将显示缺少的值(对表2重复此操作):

选择*
来自中间表i
左连接t1上的TableOne t1.TableOneid=i.TableOneid
其中t1.TableOneId为空

完成清理后,可以将中间表中的所有内容复制到定义了外键的DependentTable中

插入到从属表SELECT*FROM IntermediateTable
——所有内容都已清理,因此表1和表2中现在没有丢失的ID


如果没有这个中间表,您将无法使用一些东西来查询TableOne和TableTwo中未定义的ID。

感谢您的快速回复-我越是考虑您的解决方案,就越喜欢它。它肯定回答了我的问题。我确实喜欢这个答案,但我很好奇,在我接受它之前,是否还有其他有趣的答案。