Perlu mengecualikan id yang terdapat dalam jadual pertama daripada jadual kedua

PHPz
Lepaskan: 2024-02-11 14:33:08
ke hadapan
900 orang telah melayarinya

需要从第二个表中排除第一个表中存在的 id

editor php Yuzai di sini untuk memperkenalkan kepada anda soalan tentang pemprosesan data. Apabila kita perlu mengecualikan id yang sudah wujud dalam jadual lain daripada satu jadual, kita boleh melakukannya melalui kaedah tertentu. Masalah ini sangat biasa dalam pemprosesan data. Penyelesaian ini boleh membantu kami mengatur dan memproses data dengan lebih baik, serta meningkatkan kecekapan dan ketepatan pemprosesan data. Dalam artikel seterusnya, kami akan memperincikan cara mencapai matlamat ini dengan menggunakan pernyataan pertanyaan khusus.

Kandungan soalan

Guys, saya perlukan bantuan anda sekali lagi. Otak saya rosak dan saya tidak faham apa yang saya lakukan salah. Saya ada 2 meja

requests
id string `json:"id"`
userid string `json:"user_id"`
status string `json:"status"`
Salin selepas log masuk
students
id string `json:"id"`
userid string `json:"user_id"`
requestid string `json:"request_id"`
startdate time.time `json:"start_date"`
enddate time.time `json:"end_date"`
Salin selepas log masuk

Sebagai penerima saya mempunyai id pengguna dan saya perlu mencari semua permintaan pengguna antara tarikh mula dan tarikh tamat tetapi permintaan dengan status "dibatalkan" atau "ditolak" harus dikecualikan. Saya fikir saya boleh menggunakan join kiri tetapi ia tidak berfungsi seperti yang saya perlukan. Pada masa ini saya mempunyai pertanyaan berikut:

status := []string{"canceled", declined"}

   type Result struct {
      tableName        struct{}  `pg:"students"`
      ID               string `json:"id"`
      UserID      int       `json:"user_id"`
      RequestID string    `pg:"fk:request_id"`
      Status           string    `json:"status"`
   }

   var res []Result

    err := Model(&res).
      ColumnExpr("id, user_id, requests.status").
      Where("user_id = ?", UseID).
      Where("start_date >= ? AND end_date <= ?", startDate, endDate).
      Join("LEFT JOIN requests ON requests.id = request_id").
      WhereIn("requests.status IN (?)", status).
      Select()
Salin selepas log masuk

Pada masa ini, saya menerima semua data daripada pelajar jadual untuk tarikh yang diperlukan, tetapi ia tidak dikecualikan daripada keputusan walaupun status dalam jadual permintaan ialah "Dibatalkan" atau "Ditolak". Jika anda memerlukan sebarang maklumat tambahan daripada saya untuk membantu saya, sila beritahu saya. Terima kasih atas sebarang komen dan cadangan.

Penyelesaian

Anda perlu memastikan anda menggunakan klausa where dengan betul untuk mengecualikan permintaan dengan status "Dibatalkan" atau "Ditolak".

type Result struct {
    TableName  struct{}  `pg:"students"`
    ID         string    `json:"id"`
    UserID     string    `json:"user_id"`
    RequestID  string    `pg:"fk:request_id"`
    Status     string    `json:"status"`
}

var res []Result
status := []string{"canceled", "declined"}

err := Model(&res).
    ColumnExpr("students.id, students.user_id, students.request_id, requests.status").
    Where("students.user_id = ?", UserID).
    Where("students.start_date >= ? AND students.end_date <= ?", startDate, endDate).
    Where("NOT EXISTS (SELECT 1 FROM requests WHERE students.request_id = requests.id AND requests.status IN (?))", status).
    Select()
Salin selepas log masuk

Saya menggunakan not exists 子查询来检查在 requests 表中具有相同 request_id 的请求,并且其状态存在于 status dalam kepingan. Jika permintaan sedemikian ditemui dalam subkueri, permintaan tersebut akan dikecualikan daripada keputusan akhir.

Atas ialah kandungan terperinci Perlu mengecualikan id yang terdapat dalam jadual pertama daripada jadual kedua. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!