2017-11-11 28 views
-1

目前我有相同的值,插入新的SQL行僅當有來自其他表

表1:

ID | DEVICEID | STATUS | 
-------------------------------- 
1 | SN001  | ENROLL | 
2 | SN002  | ENROLL | 

表2:

ID | DEVICEID | STATUS | 
-------------------------------- 
1 | SN001  | ENROLL | 
2 | SN002  | ENROLL | 
3 | SN003  | ENROLL | 
4 | SN004  | ENROLL | 

有一個表格填寫以便使用AJAX POST將新的DEVICEID和STATUS插入到Table1中。在更新SQL之前,如何創建一個條件,其中表1只有可以更新,如果只有相同 DEVICEID在表格2中填充爲DEVICEID,否則它將返回錯誤並且不會更新表1。

這是我有:

"SELECT deviceid 
FROM table1 
INNER JOIN table2 ON table1.deviceid=table2.deviceid 
INSERT INTO table1(deviceId,status) 
VALUES('$deviceid', '$status') 
WHERE deviceid = deviceid";     <--- Not sure what I'm doing here, trying to compare 
+0

'mysql'或'sql-server'? –

+0

正在使用mysql。 –

回答

0
INSERT INTO table1 
SELECT DEVICEID, STATUS 
FROM Table2 
WHERE DEVICEIUD = @param1 AND STATUS = @param2 
LIMIT 1 

SELECT ROW_COUNT(); 

並檢查行的數量影響

0

我一般用兩個查詢

"SELECT EXISTS (
    SELECT deviceid 
    FROM table1 
    INNER JOIN table2 ON table1.deviceid=table2.deviceid 
)" 

則去,如果你正在使用PDO檢查如果rowCount is == 0這樣的

if ($stmt->rowCount == 0) { 
    "INSERT INTO table1(deviceId,status) 
    VALUES('$deviceid', '$status') 
    WHERE deviceid = deviceid 
    "; 
} else { 
    echo "Device ID already exists."; 
} 

記住,使用SELECT EXISTS()將只返回01,所以你將無法得到任何數據,如果你想返回一些數據,你可以用

SELECT deviceid 
FROM table1 
INNER JOIN table2 ON table1.deviceid=table2.deviceid 
LIMIT 1 

也行如果你打算在使用PDO來獲取數據,然後使用rowCount()代替fetchColumn()