将数据从一个 table 复制到另一个,但添加第二个 WHERE 子句不会插入数据
Copy data from one table to another but adding 2nd WHERE clause won't insert data
我有两个 table。当用户单击一个按钮时,它会将数据从 table 1 复制到 table 2,其中 table 2 中尚不存在 table 2。
我的查询运行得很好,直到我在第一个 table 中添加了一个名为 "onsite" 的新列 - 它要么设置为 yes,要么为 NULL。
这是我试过的查询。它不再将任何数据插入 past_bidder table (table 2)
$copybidderquery = "INSERT INTO past_bidders(bidnum, bidfname, bidlname, bidphnum, bidlicense, bidaddress, bidtaxexempt, bidtaxid, date_created)
SELECT bidnum, bidfname, bidlname, bidphnum, bidlicense, bidaddress, bidtaxexempt, bidtaxid, date_created
FROM bidders
WHERE (bidfname, bidlname, bidphnum, bidlicense, bidaddress)
NOT IN (SELECT bidfname, bidlname, bidphnum, bidlicense, bidaddress FROM past_bidders)
AND onsite != 'yes'";
我也试过将 where onsite != 'yes' 移到 "WHERE" 之后,它仍然做同样的事情。
$copybidderquery = "INSERT INTO past_bidders(bidnum, bidfname, bidlname, bidphnum, bidlicense, bidaddress, bidtaxexempt, bidtaxid, date_created)
SELECT bidnum, bidfname, bidlname, bidphnum, bidlicense, bidaddress, bidtaxexempt, bidtaxid, date_created
FROM bidders
WHERE onsite != 'yes'
AND (bidfname, bidlname, bidphnum, bidlicense, bidaddress)
NOT IN (SELECT bidfname, bidlname, bidphnum, bidlicense, bidaddress FROM past_bidders)";
如前所述,此查询在没有 "onsite != 'yes'" 行的情况下也能正常工作。
我认为这只是我忽略的一些小语法错误。任何帮助将不胜感激。
INSERT INTO past_bidders(bidnum, bidfname, bidlname, bidphnum, bidlicense, bidaddress, bidtaxexempt, bidtaxid, date_created)
SELECT bidnum, bidfname, bidlname, bidphnum, bidlicense, bidaddress, bidtaxexempt, bidtaxid, date_created
FROM bidders
WHERE onsite is NULL AND (bidfname, bidlname, bidphnum, bidlicense, bidaddress)
NOT IN (SELECT bidfname, bidlname, bidphnum, bidlicense, bidaddress FROM past_bidders)
;
检查以下示例,当您说不等于某物时,它不会 return 空值
mysql> select * from calls;
+----+------------+---------+
| id | date | user_id |
+----+------------+---------+
| 1 | 2016-06-22 | 1 |
| 2 | 2016-06-22 | NULL |
| 3 | 2016-06-22 | NULL |
| 4 | 2016-06-23 | 2 |
| 5 | 2016-06-23 | 1 |
| 6 | 2016-06-23 | 1 |
| 7 | 2016-06-23 | NULL |
+----+------------+---------+
7 rows in set (0.00 sec)
mysql> select * from calls where user_id!=1;
+----+------------+---------+
| id | date | user_id |
+----+------------+---------+
| 4 | 2016-06-23 | 2 |
+----+------------+---------+
1 row in set (0.00 sec)
mysql> select * from calls where user_id is null;
+----+------------+---------+
| id | date | user_id |
+----+------------+---------+
| 2 | 2016-06-22 | NULL |
| 3 | 2016-06-22 | NULL |
| 7 | 2016-06-23 | NULL |
+----+------------+---------+
3 rows in set (0.00 sec)
可能存在隐藏字符或值不是 'yes' 或者您也应该检查是否为非空值
$copybidderquery = "INSERT INTO past_bidders(bidnum, bidfname, bidlname, bidphnum, bidlicense, bidaddress, bidtaxexempt, bidtaxid, date_created)
SELECT bidnum, bidfname, bidlname, bidphnum, bidlicense, bidaddress, bidtaxexempt, bidtaxid, date_created
FROM bidders
WHERE (bidfname, bidlname, bidphnum, bidlicense, bidaddress)
NOT IN (SELECT bidfname, bidlname, bidphnum, bidlicense, bidaddress FROM past_bidders)
AND trim(lower(onsite) )!= 'yes';
!=
returns NULL
当任一值为 NULL
时。您有两个选择:
SELECT bidnum, bidfname, bidlname, bidphnum, bidlicense, bidaddress, bidtaxexempt, bidtaxid, date_created
FROM bidders
WHERE (bidfname, bidlname, bidphnum, bidlicense, bidaddress) NOT IN
(SELECT bidfname, bidlname, bidphnum, bidlicense, bidaddress
FROM past_bidders
) AND
onsite is null;
或者,使用 NULL
安全相等:
SELECT bidnum, bidfname, bidlname, bidphnum, bidlicense, bidaddress, bidtaxexempt, bidtaxid, date_created
FROM bidders
WHERE (bidfname, bidlname, bidphnum, bidlicense, bidaddress) NOT IN
(SELECT bidfname, bidlname, bidphnum, bidlicense, bidaddress
FROM past_bidders
) AND
(NOT onsite <=> 'yes');
我有两个 table。当用户单击一个按钮时,它会将数据从 table 1 复制到 table 2,其中 table 2 中尚不存在 table 2。
我的查询运行得很好,直到我在第一个 table 中添加了一个名为 "onsite" 的新列 - 它要么设置为 yes,要么为 NULL。
这是我试过的查询。它不再将任何数据插入 past_bidder table (table 2)
$copybidderquery = "INSERT INTO past_bidders(bidnum, bidfname, bidlname, bidphnum, bidlicense, bidaddress, bidtaxexempt, bidtaxid, date_created)
SELECT bidnum, bidfname, bidlname, bidphnum, bidlicense, bidaddress, bidtaxexempt, bidtaxid, date_created
FROM bidders
WHERE (bidfname, bidlname, bidphnum, bidlicense, bidaddress)
NOT IN (SELECT bidfname, bidlname, bidphnum, bidlicense, bidaddress FROM past_bidders)
AND onsite != 'yes'";
我也试过将 where onsite != 'yes' 移到 "WHERE" 之后,它仍然做同样的事情。
$copybidderquery = "INSERT INTO past_bidders(bidnum, bidfname, bidlname, bidphnum, bidlicense, bidaddress, bidtaxexempt, bidtaxid, date_created)
SELECT bidnum, bidfname, bidlname, bidphnum, bidlicense, bidaddress, bidtaxexempt, bidtaxid, date_created
FROM bidders
WHERE onsite != 'yes'
AND (bidfname, bidlname, bidphnum, bidlicense, bidaddress)
NOT IN (SELECT bidfname, bidlname, bidphnum, bidlicense, bidaddress FROM past_bidders)";
如前所述,此查询在没有 "onsite != 'yes'" 行的情况下也能正常工作。
我认为这只是我忽略的一些小语法错误。任何帮助将不胜感激。
INSERT INTO past_bidders(bidnum, bidfname, bidlname, bidphnum, bidlicense, bidaddress, bidtaxexempt, bidtaxid, date_created)
SELECT bidnum, bidfname, bidlname, bidphnum, bidlicense, bidaddress, bidtaxexempt, bidtaxid, date_created
FROM bidders
WHERE onsite is NULL AND (bidfname, bidlname, bidphnum, bidlicense, bidaddress)
NOT IN (SELECT bidfname, bidlname, bidphnum, bidlicense, bidaddress FROM past_bidders)
;
检查以下示例,当您说不等于某物时,它不会 return 空值
mysql> select * from calls;
+----+------------+---------+
| id | date | user_id |
+----+------------+---------+
| 1 | 2016-06-22 | 1 |
| 2 | 2016-06-22 | NULL |
| 3 | 2016-06-22 | NULL |
| 4 | 2016-06-23 | 2 |
| 5 | 2016-06-23 | 1 |
| 6 | 2016-06-23 | 1 |
| 7 | 2016-06-23 | NULL |
+----+------------+---------+
7 rows in set (0.00 sec)
mysql> select * from calls where user_id!=1;
+----+------------+---------+
| id | date | user_id |
+----+------------+---------+
| 4 | 2016-06-23 | 2 |
+----+------------+---------+
1 row in set (0.00 sec)
mysql> select * from calls where user_id is null;
+----+------------+---------+
| id | date | user_id |
+----+------------+---------+
| 2 | 2016-06-22 | NULL |
| 3 | 2016-06-22 | NULL |
| 7 | 2016-06-23 | NULL |
+----+------------+---------+
3 rows in set (0.00 sec)
可能存在隐藏字符或值不是 'yes' 或者您也应该检查是否为非空值
$copybidderquery = "INSERT INTO past_bidders(bidnum, bidfname, bidlname, bidphnum, bidlicense, bidaddress, bidtaxexempt, bidtaxid, date_created)
SELECT bidnum, bidfname, bidlname, bidphnum, bidlicense, bidaddress, bidtaxexempt, bidtaxid, date_created
FROM bidders
WHERE (bidfname, bidlname, bidphnum, bidlicense, bidaddress)
NOT IN (SELECT bidfname, bidlname, bidphnum, bidlicense, bidaddress FROM past_bidders)
AND trim(lower(onsite) )!= 'yes';
!=
returns NULL
当任一值为 NULL
时。您有两个选择:
SELECT bidnum, bidfname, bidlname, bidphnum, bidlicense, bidaddress, bidtaxexempt, bidtaxid, date_created
FROM bidders
WHERE (bidfname, bidlname, bidphnum, bidlicense, bidaddress) NOT IN
(SELECT bidfname, bidlname, bidphnum, bidlicense, bidaddress
FROM past_bidders
) AND
onsite is null;
或者,使用 NULL
安全相等:
SELECT bidnum, bidfname, bidlname, bidphnum, bidlicense, bidaddress, bidtaxexempt, bidtaxid, date_created
FROM bidders
WHERE (bidfname, bidlname, bidphnum, bidlicense, bidaddress) NOT IN
(SELECT bidfname, bidlname, bidphnum, bidlicense, bidaddress
FROM past_bidders
) AND
(NOT onsite <=> 'yes');