【问题标题】:How can I use JOIN in the INSERT query?如何在 INSERT 查询中使用 JOIN?
【发布时间】:2016-05-02 05:42:03
【问题描述】:

我有这个问题:

INSERT INTO table1 (col1)
SELECT :val
FROM table2 t2
WHERE t2.id = :id limit 1;

此查询检查t2.id = :id 是否为真,然后插入。现在我也想检查table3.id = :id。我想在这种情况下我必须使用JOIN。我该怎么做?

我这样传递参数:

$stm->bindValue(":val", $value, PDO::PARAM_STR);
$stm->bindValue(":id", $id, PDO::PARAM_INT);

注意:我知道我可以通过 FK 做到这一点。但我不想那样。

【问题讨论】:

  • 您的:val 将始终是相同的值字符串,而不是安全列名,因此它与SELECT "some_string" FROM table2 t2 相同
  • @Justinas 我不明白.. 你到底是什么意思?
  • 我的意思是 PDO 会将您的列名转义为简单的字符串,结果您收到的是列名而不是列值。
  • 如果你打印那个 SQL 语句,它看起来像这样'INSERT INTO table1 (col1) SELECT "fieldname" FROM table2 t2 WHERE t2.id = 1 limit 1'。您需要更改语句 '$sql = INSERT INTO table1 (col1) SELECT ' 。 $价值。 ' FROM table2 t2 WHERE t2.id = :id limit 1'
  • @stack 不,我的意思是参数绑定仅适用于实际参数,而不适用于列/表名

标签: php mysql sql pdo


【解决方案1】:

试试这个

INSERT INTO table1 (col1)
SELECT :val
FROM table2 t2, table3 t3
WHERE t2.id = :id and t3.id = :id limit 1;

【讨论】:

    【解决方案2】:
    insert into table_name object
    INNER JOIN table_2 object2 ON object2.attribute = object2.attribute
    (object2.attribute1, object2.attribute2, object.attribute1, object.attribute2) 
    values
    ('somevalue', 'somevalue', 'somevalue', 'somevalue')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-19
      • 1970-01-01
      • 2020-04-23
      • 2011-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-07
      相关资源
      最近更新 更多