簡體   English   中英

MySQL查詢不存在

[英]mySQL Query NOT EXISTS

我被困在一個mySQL查詢上,我只是無法理解。 我目前正在編寫一個PHP程序,可以幫助解決教科書問題。 我有一個帶有2個表的mySQL數據庫。

Books  table 
PID   ISBN   BKNAME  CID

Issued table
PID SNR ISBN CAMPUSNR DATE

發行書籍的人將輸入學生編號,並顯示該學生必須為其注冊的課程收到的所有書籍。 像這樣:

  $stmt = $db->prepare("SELECT isbn,bkname,cid FROM books WHERE (cid = :course)");
  $stmt->bindValue(':course', $StudCourse, PDO::PARAM_INT);
  $stmt->execute();
  $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

每本書后面都會在屏幕上顯示一個復選框。 然后,發行人在他給學生的書上打勾,然后單擊發行按鈕。 然后將此數據插入數據庫中,如下所示:

$stmt = $db->prepare("INSERT INTO issued(snr,isbn,campusnr,date) VALUES (:snr,:isbn,:campusnr,:date)");
      $stmt->bindValue(':snr', $Studnr, PDO::PARAM_INT);
      $stmt->bindValue(':isbn',$Ticked[$Num], PDO::PARAM_INT);
      $stmt->bindValue(':campusnr', $Campus, PDO::PARAM_INT);
      $stmt->bindValue(':date', $IssueDate, PDO::PARAM_STR);

這樣做的問題是,如果以后要向運行第一條語句的學生發行更多的書,則會導致錯誤,如果發行人在書后的方框中打錯了錯誤,則可能再次發行同一本書。

有沒有一種方法可以在第一個語句中僅顯示仍需要發行的書籍。 我已經嘗試了以下mySQL語句:

SELECT * 
FROM books 
INNER JOIN issued ON books.isbn = issued.isbn 
WHERE snr =  '151107549'
    AND NOT EXISTS (
        SELECT isbn, bkname, cid 
        FROM books 
        WHERE cid =  'NC3OA'
    )

但是,我沒有任何結果。 MySQL專家可能會提供一些幫助嗎?

SELECT books.isbn,books.bkname,books.cid
    FROM books
    LEFT JOIN issued ON books.isbn = issued.isbn AND issued.snr = :snr
WHERE books.cid = :course AND issued.isbn IS NULL
ORDER BY books.isbn ASC

看看這個解釋JOIN的偉大人物:

在此處輸入圖片說明

您希望books具有特定cid所有行。 現在要從issued刪除行,您可以執行LEFT JOIN並檢查鍵是否為NULL

SELECT books.isbn, books.bkname, books.cid FROM books
LEFT JOIN issued
ON books.isbn = issued.isbn
WHERE cid = :course
    AND issued.isbn IS NULL

你是正確使用NOT EXISTS這里,你正在尋找在沒有問題的條目還存在那些書。 但是,您沒有正確使用EXISTS子句。 您在問:如果數據庫中沒有cid NC3OA的書籍,請只給我結果,因此您永遠不會獲得任何記錄。 (以某種方式您的陳述看起來很混亂;內部聯接將為您提供已發行而不是未發行的書。)

我的理解是:您希望某門課程的所有書籍都已發行給學生。 這是正確的聲明:

SELECT * 
FROM books 
WHERE cid = 'NC3OA'
AND NOT EXISTS
(
  SELECT *
  FROM issued 
  WHERE issued.isbn = books.isbn
  AND snr =  '151107549'
);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM