簡體   English   中英

Mysql選擇只有特定條件的結果

[英]Mysql select results that have only a specific condition

這是我的問題:我有一個與不同國際項目相關的用戶列表,我希望得到專門為美國項目工作的用戶,所以讓我們說如果有人為德國項目工作,我不想要他在名單中。 它涉及三個表:用戶,項目,公司

這是第一個獲取用於美國項目的用戶的查詢:

SELECT DISTINCT users.forename, users.surname, users.email, users.company_id,  users.user_id
FROM projects, company, users
WHERE projects.project_type = 'US'
AND company.project_id = projects.project_id
AND users.company_id = company.company_id
ORDER BY surname, forename

現在我如何排除還有其他國家項目的用戶?

您可以使用NOT IN子句來排除在其他項目上工作的用戶。

在條件添加到下面的行

WHERE projects.user_id 
  NOT IN (select user_id from projects where projects.project_type != 'US')

您可以加入表格並根據條件進行過濾

SELECT DISTINCT users.forename, users.surname, users.email, users.company_id,  users.user_id
FROM users
JOIN company USING (company_id)
JOIN projects USING (project_id)
WHERE projects.project_type = 'US'
ORDER BY surname, forename

此查詢創建包含用戶的行以及有關公司和項目的信息,並在使用條件WHERE projects.project_type = 'US'過濾這些行之后

你可以試試HAVING 如果用戶僅在美國工作,則COUNT必須為1:

SELECT DISTINCT users.forename, COUNT(projects.*) AS c, users.surname, users.email, users.company_id,  users.user_id
FROM projects, company, users
WHERE projects.project_type = 'US'
AND company.project_id = projects.project_id
AND users.company_id = company.company_id
GROUP BY projects.project_type
HAVING c = 1
ORDER BY surname, forename

也許這段代碼不起作用,無法檢查,但你可以嘗試這個方向。

not exists會做這個工作

SELECT DISTINCT users.forename, users.surname, users.email, users.company_id,  users.user_id
FROM projects, company, users
WHERE projects.project_type = 'US'
AND company.project_id = projects.project_id
AND users.company_id = company.company_id
AND NOT EXISTS (
    SELECT * 
      FROM projects notUS 
     WHERE notUS.project_type <> 'US' 
       AND notUS.user_id = users.user_id)
ORDER BY surname, forename

你可以用這個: -

SELECT DISTINCT users.forename, users.surname, users.email, users.company_id,  users.user_id
FROM projects, company, users
WHERE users.company_id = company.company_id
AND company.project_id = projects.project_id
AND projects.user_id 
IN (select user_id from projects where projects.project_type = 'US')
ORDER BY surname, forename

試試這個我覺得你需要MINUS:

SELECT 
    users.forename, users.surname, users.email, users.company_id,  users.user_id
FROM 
    users
where 
    user_id not in(SELECT DISTINCT user_id from users where company_id in
    (
        Select company_id from company where project_id = (
            Select project_id from projects where project_type != 'US'
        )
    ) 

你也可以這樣做

SELECT DISTINCT
  users.forename,
  users.surname,
  users.email,
  users.company_id,
  users.user_id
FROM projects
  INNER JOIN company
    ON company.project_id = projects.project_id
  INNER JOIN users
    ON users.company_id = company.company_id
  INNER JOIN (SELECT *
          FROM projects
          WHERE project_type <> 'US') AS project
    ON project.project_id = projects.project_id
WHERE project.project_id IN NULL
GROUP BY projects.project_id
ORDER BY surname, forename

暫無
暫無

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

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