【问题标题】:MYSQL- Insert if value is greater than or smaller than stock [duplicate]MYSQL-如果值大于或小于库存则插入[重复]
【发布时间】:2019-06-08 01:03:01
【问题描述】:

我看到这个问题与我MySQL INSERT IF (custom if statements) 几乎相同。

但是我没有成功执行这个查询:

INSERT into cart_items (product_id,product_variant_id,product_attribute_id,cart_id,quantity)
select (7,7,12,11,4)
where (select pa.stock from product_attribute as pa where pa.id = 12) > 4 

在这种情况下,这是 (product_id,product_variant_id,product_attribute_id,cart_id,quantity) 的 (7,7,12,11,4) 值

product_id:7

product_variant_id :7

product_attribute_id:12

cart_id : 11

数量:4

在我的 headiSQL 中,我遇到了这样的错误:

SQL(错误(1241):操作数应包含 1 列

表购物车项目

ID : Primary key autoincrement
product_variant_id : Foreign key
product_attribute_id : Foreign key
product_id : Foreign key
cart_id : Foreign key
quantity :int

表产品属性

ID : Primary key autoincrement
product_id : Foreign key
product_variant_id :Foreign key
size : varchar
stock : int

我想查询 cart_items quantity 是否小于 product_attribute 库存而不是插入

【问题讨论】:

    标签: mysql


    【解决方案1】:
    INSERT into cart_items (product_id,product_variant_id,product_attribute_id,cart_id,quantity)
    SELECT product_id,product_variant_id,product_attribute_id,cart_id,quantity FROM product_attribute
    WHERE id = ? && (SELECT stock from product_attribute WHERE id = ?) > (SELECT quantity FROM cart_items WHERE product_id = ?) 
    

    这可确保库存量大于购物车数量。确保产品 ID 匹配 (?)

    另外,我不确定您是否打算从 SELECT 执行 INSERT,但由于您在示例中提供了原始整数值,因此我已将其更改为 INSERT(列)VALUES(值),因为这是基于正确的格式以你为例。

    【讨论】:

    • VALUES 子句不能使用WHERE
    • 糟糕,完全是胡思乱想——你说得对,当我将 SELECT 换成 VALUES 时,我还以为这是一条 UPDATE 语句。我想知道“案例”查询是否对此有好处
    • A SELECT 不能接受(resultlist),它需要FROM 语句,可能只是接受Tim 的回答
    • 是的,但是 OP 的问题是使用双重选择来比较两个值...我猜他知道如何构造一个 INSERT / SELECT 查询 - 他只是硬编码这些值作为示例
    • 这是 `(7,7,12,11,4)` 值不是来自其他表,所以我认为我不需要这样做SELECT product_id,product_variant_id,product_attribute_id,cart_id,quantity FROM product_attribute
    【解决方案2】:

    尝试从虚拟DUAL 表中进行选择:

    INSERT into cart_items (product_id, product_variant_id, product_attribute_id,
        cart_id, quantity)
    SELECT 7, 7, 12, 11, 4
    FROM dual
    WHERE (SELECT pa.stock FROM product_attribute pa WHERE pa.id = 12) > 4;
    

    我不知道上面的逻辑是不是你真正打算运行的,但它至少应该在没有语法错误的情况下运行。

    【讨论】:

    • 或只是INSERT .. SELECT 7, 7, 12, 11, 4 FROM product_attribute pa WHERE pa.id = 12 AND pa.stock > 4;
    • @danblack 我不能说我什至知道你的建议会奏效(没有明确的表格),但我并不感到惊讶。
    • 这是什么意思? FROM dual
    • 这是可选的,如果你愿意,你可以删除FROM dual
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-22
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    • 2013-05-31
    • 2019-11-10
    • 1970-01-01
    相关资源
    最近更新 更多