MySQL从另一个具有2个选项WHERE语句的表插入

MySQL从另一个具有2个选项WHERE语句的表插入,mysql,sql,Mysql,Sql,我已经做了研究,但不知道怎么做。从另一个表插入非常简单,但我想包括WHERE语句 我想将一个单列的值,即表a中的列_Q插入表B的列_Q,其中表a的列_W='100'和列_Q在表B中不存在 我试过: INSERT INTO B (column_Q) select DISTINCT(column_Q) from A WHERE column_W = 100 AND b.column_Q<>a.column_Q; 我哪里做错了 PS.两个表都已包含值。没有字段为空 INSERT INT

我已经做了研究,但不知道怎么做。从另一个表插入非常简单,但我想包括WHERE语句

我想将一个单列的值,即表a中的列_Q插入表B的列_Q,其中表a的列_W='100'和列_Q在表B中不存在

我试过:

INSERT INTO B (column_Q) select DISTINCT(column_Q) 
from A WHERE column_W = 100 AND b.column_Q<>a.column_Q;
我哪里做错了

PS.两个表都已包含值。没有字段为空

INSERT
INTO    b (q)
SELECT  DISTINCT q
FROM    a
WHERE   a.w = 100
        AND a.q NOT IN
        (
        SELECT  q
        FROM    b
        )
如果您的b.q上定义了唯一的约束,则只需使用:

INSERT
IGNORE
INTO    b (q)
SELECT  q
FROM    a
WHERE   w = 100
如果您的b.q上定义了唯一的约束,则只需使用:

INSERT
IGNORE
INTO    b (q)
SELECT  q
FROM    a
WHERE   w = 100

您不能引用作业的左侧,因为B中没有要与插入的行进行比较的当前行。您需要检查B中是否已经存在类似的行,如:

INSERT INTO B (column_Q)
SELECT DISTINCT(A.column_Q) 
FROM A 
WHERE A.column_W = 100
AND NOT EXISTS (
    SELECT *
    FROM B
    WHERE B.column_Q = A.column_Q
    );

您不能引用作业的左侧,因为B中没有要与插入的行进行比较的当前行。您需要检查B中是否已经存在类似的行,如:

INSERT INTO B (column_Q)
SELECT DISTINCT(A.column_Q) 
FROM A 
WHERE A.column_W = 100
AND NOT EXISTS (
    SELECT *
    FROM B
    WHERE B.column_Q = A.column_Q
    );