【问题标题】:MySQL Insert into table with values from Inner JoinMySQL 使用来自内部联接的值插入表中
【发布时间】:2016-05-23 12:35:04
【问题描述】:

我正在尝试将数据插入到库存表中,从单独的用户表中提取用户 ID 以填充其中一个字段。

 Inventory:
 ProductID | PurchasedByUser | OtherAttributes

还有一个用户表;

 Users:
 DBID | UserActive | UserName
   1  |     1      |  mathew

到目前为止,我的 SQL 看起来像:

 INSERT INTO Inventory (ProductID, PurchasedByUser, OtherAttributes)
 SELECT 23, U.DBID, 'Yellow'
 FROM Inventory U INNER JOIN Users ud 
 ON U.DBID = ud.DBID AND ud.UserActive = 1 AND UserName = 'mathew'

编辑: 我希望能够发出一个 SQL INSERT 请求来添加 ProductID (INT)、PurchableByUser (Users.DBID)、OtherAttributes (String) 到 Inventory 表,而不暴露 DBID 并且只传递 UserName 字段。

【问题讨论】:

  • 为什么要选择Inventory?并引用您的静态值,例如黄色和马修。
  • 什么是23,什么是黄色?然后将 SELECT 与 INSERT 混合使用。这是一个完全无效的查询
  • 我不知道,这只是一个示例 SQL 插入,黄色代表 $VariablesFromScript
  • 'Yellow' 是字符串吗?是“马修”[原文如此]?

标签: php mysql inner-join


【解决方案1】:

将 U.DBID 更改为 ud.DBID

INSERT INTO Inventory (ProductID, PurchasedByUser, OtherAttributes)
SELECT 23, ud.DBID, 'Yellow'
FROM Inventory U INNER JOIN Users ud 
ON U.PurchasedByUser = ud.DBID AND ud.UserActive = 1 AND ud.UserName = 'mathew';

【讨论】:

    【解决方案2】:

    在查询中U.DBID 是错误的,因为U 是库存的别名,所以请更改并输入ud.DBID,您的查询将得到解决。

    INSERT INTO Inventory (ProductID, PurchasedByUser, OtherAttributes)
    SELECT 23, ud.DBID, Yellow
    FROM Inventory U INNER JOIN Users ud 
    ON U.PurchasedByUser = ud.DBID AND ud.UserActive = 1 AND ud.UserName = 'mathew'
    

    【讨论】:

    • UserName = mathew 这是一个字符串,不是整数。
    • 是的,我们必须写ud.UserName = 'mathew',因为mathew 是字符串,UserName 是字符串类型列。
    【解决方案3】:

    您可以分两步完成。先获取用户的id:

    SELECT DBID
    FROM Users
    WHERE UserActive=1 AND UserName='mathew';
    

    现在您有了用户 ID,您可以通过第二个查询将其插入到 Inventory 表中:

    INSERT INTO Inventory (ProductID,PurchasedByUser,OtherAttributes )
    VALUES(23,<THE-USER'S-ID>, 'Yellow');
    

    我假设您知道如何在 PHP 中执行此操作,因为您不需要 PHP 代码

    【讨论】:

      【解决方案4】:

      我相信23Yellow 是记录,而mathew 需要quote

        INSERT INTO Inventory (ProductID, PurchasedByUser, OtherAttributes)
        SELECT 23, U.DBID, Yellow
        FROM Inventory U INNER JOIN Users ud 
        ON U.DBID = ud.DBID AND ud.UserActive = 1 AND UserName = mathew
      

      到这里

       INSERT INTO Inventory (ProductID, PurchasedByUser, OtherAttributes)
       SELECT ProductID, PurchasedByUser , OtherAttributes
       FROM Inventory U INNER JOIN Users ud 
       ON U.DBID = ud.DBID AND ud.UserActive = 1 AND UserName = 'mathew'
      

      【讨论】:

        【解决方案5】:

        在您构建的 SQL 查询中,您指的是 U 的 DBID,即 Inventory 表。根据您分享的结构,我认为您需要以下查询:

         INSERT INTO Inventory (ProductID, PurchasedByUser, OtherAttributes)
         SELECT 23, ud.DBID, Yellow
         FROM Inventory U INNER JOIN Users ud 
         ON U.PurchasedByUser= ud.DBID AND ud.UserActive = 1 AND UserName = 'mathew'
        

        我仍然对这里试图实现的目标感到困惑,您正在从 Inventory 中获取值并将其重新插入。不确定。只是想帮助您找出查询!

        【讨论】:

        • UserName = mathew 这是一个字符串,不是整数。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-26
        • 1970-01-01
        相关资源
        最近更新 更多