在mysql中,如果滿足3個條件,我嘗試列印'-1'。
SELECT '-1'
WHERE not exists(select * from acq_staff where acq_person_id = staffID)
OR not exists(select * from acq_training_course_session where training_course_id = course_id)
OR exists(select * from acq_training_enrolment where acq_staff_acq_person_id = staffID);
但是我怎樣才能將此 SELECT 陳述句更改為 IF 陳述句,以便如果滿足這 3 個條件,則列印 -1 否則我將插入資料。
抱歉資訊不足
uj5u.com熱心網友回復:
我想你可以這樣做:如何在 MySQL 中模擬列印陳述句?
`mysql>SELECT 'some text' as '';
-----------
| |
-----------
| some text |
-----------
1 row in set (0.00 sec)`
而不是some textset -1。
我在您的問題中注意到的另一件事是“如果滿足這 3 個條件”,如果您希望滿足所有 3 個條件,則需要更改OR為AND. 因為在您的情況下,OR只需要滿足 1 個條件,但AND需要滿足所有 3 個條件。
uj5u.com熱心網友回復:
MySQLINNER JOIN和WHERE NOT EXISTS可用于確定是否存在現有課程和現有人員,以及該人員是否已注冊該課程,如果沒有,INSERT則確定注冊表中的人員和課程 ID。
-- create
CREATE TABLE acq_staff (
acq_person_id INTEGER PRIMARY KEY
);
CREATE TABLE acq_training_course_session (
training_course_id INTEGER PRIMARY KEY
);
CREATE TABLE acq_training_enrolment (
training_course_id INTEGER NOT NULL,
acq_staff_acq_person_id INTEGER NOT NULL
);
-- insert
INSERT INTO acq_staff VALUES (1), (2), (3);
INSERT INTO acq_training_course_session VALUES (1), (2), (3), (4);
INSERT INTO acq_training_enrolment VALUES (1,1), (1,2), (2,1), (3,1);
-- fetch
INSERT INTO acq_training_enrolment (training_course_id, acq_staff_acq_person_id)
SELECT 3, 1 WHERE NOT EXISTS
(SELECT *
FROM acq_training_course_session
INNER JOIN acq_training_enrolment
ON acq_training_course_session.training_course_id = acq_training_enrolment.training_course_id
INNER JOIN acq_staff ON acq_training_enrolment.acq_staff_acq_person_id = acq_staff.acq_person_id
WHERE acq_training_course_session.training_course_id = 3
AND acq_staff.acq_person_id = 1)
;
在這里試試:https ://onecompiler.com/mysql/3yk7xynkg
uj5u.com熱心網友回復:
也許你可以試試
select
if(
acq_staff.acq_person_id = staffID , '-1' ,
if(
acq_training_course_session.training_course_id = course_id , '-1' ,
if(acq_training_enrolment.acq_staff_acq_person_id = staffID , '-1' , 'not exist')
)
) as "check" from acq_staff , acq_training_course_session , acq_training_enrolment limit 1
uj5u.com熱心網友回復:
問題是關于如何有條件地執行插入查詢。在偽代碼中,問題詢問如何執行以下操作
flag = (SELECT ... WHERE <all the conditions are met>)
IF flag == 1
INSERT INTO ....
ELSE IF flag == -1
DO NOTHING
現在這樣想
result_set = (SELECT ... WHERE <all the conditions are met>)
# result_set here is the actual rows we want to insert
# length(result_set) > 0 if conditions are met
# length(result_set) == 0 if conditions are not met
INSERT INTO ... (result_set)
或者干脆
INSERT INTO ... (SELECT ... WHERE <all the conditions are met>)
當 時<all the conditions are met>,插入實際上會插入一些東西。否則,它將有一個空的結果集,因此不會插入任何行。
所以使用INSERT INTO ... SELECT ... WHERE <all the conditions are met>語法來達到預期的結果。不幸的是,這個解決方案沒有辦法回傳 -1。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/516986.html
標籤:mysql
