簡體   English   中英

sql左加入條件

[英]sql left join with condition

我在Android中使用SQLite遇到此問題:

項目我應該得到:

1)標題字段包含字符串的所有項目。 示例'%sho%'

2)檢查項目是否屬於給定項目(22)

project
┌───┬─────────┐
│ id│idProject│
├───┼─────────┤
│ 1 │      1  │
│ 2 │      22 │
└───┴─────────┘
items         projectitems
┌───┬──────┐  ┌───┬─────────┬─────────┐
│id │ title│  │ id│  idItem │idProject│
├───┼──────┤  ├───┼─────────┼─────────┤
│10 │ show1│  │ 1 │      10 │      22 │
│11 │ show2│  │ 2 │      11 │      22 │
│12 │ show3│  │ 3 │      12 │      22 │
│13 │ show4│  │ 4 │      10 │       1 │
│14 │ show5│  │ 5 │      11 │       1 │
│15 │ show6│  │ 6 │      12 │       1 │
└───┴──────┘  └───┴─────────┴─────────┘

我嘗試了這個:

SELECT 
  e.id, e.title, l.idProject 
from 
  items as e 
LEFT JOIN projectitems as l
  on e.id = l.idItem
WHERE 
  e.title LIKE '%sho%' AND l.idProject = 22
ORDER BY 
  e.title ASC

我得到的結果是:

id  title   idProject
10  show1   22
11  show2   22
12  show3   22

我想要的結果:

id  title   idProject
10  show1   22
11  show2   22
12  show3   22
13  show4   (null)
14  show5   (null)
15  show6   (null)

另外,如果您知道實現此目標的其他方法,請告訴我。 謝謝。

sqlfiddle

只需將條件從WHERE子句移到ON

SELECT 
  e.id, e.title, l.idProject 
from 
  items as e 
LEFT JOIN projectitems as l
  on e.id = l.idItem
  and l.idProject = 22
WHERE
   e.title LIKE '%sho%'
ORDER BY 
  e.title ASC

您必須將l.idProject = 22移到ON子句:

SELECT 
  e.id, e.title, l.idProject 
from 
  items as e 
LEFT JOIN projectitems as l
  on e.id = l.idItem AND l.idProject = 22
WHERE 
  e.title LIKE '%sho%' 
ORDER BY 
  e.title ASC

將謂詞放在WHERE子句中會將LEFT JOIN轉換為INNER JOIN

暫無
暫無

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

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