2017-08-04 97 views
1

我有一個腳本,在檢查員工的時候可以看到彼此的庫存庫存,並鏈接到他們的個人庫存位置,因此每個在員工中檢查的人員都可以看到哪些庫存庫存不同位置。不過,我想主要的股票(的1 ID,這是沒有附加到員工)總是被顯示,但我不能得到查詢權,因爲該where語句之一顯然是不正確的:基於多個條件的SQL查詢

`stock_locations`.`location_id` = 1 AND 
`workschedule`.`checkedIn` = 1 AND 

記住,主股票沒有鏈接到員工,所以它不出現在workschedule表。如果我刪除了第一個陳述,它清楚地顯示了所有員工在他們所在位置的入住情況,但是這並沒有給我提供主要股票。如果我刪除第二個陳述,它只顯示我的主要股票。

我該如何解決SQL中的這個問題?這是順便說一句完整的聲明:

SELECT 
    `item_quantities`.`item_id`, 
    `stock_locations`.`location_name`, 
    `item_quantities`.`quantity`, 
    `people`.`first_name` 
FROM 
    `item_quantities` 
JOIN `stock_locations` ON `item_quantities`.`location_id` = `stock_locations`.`location_id` 
JOIN `items` ON `item_quantities`.`item_id` = `items`.`item_id` 
LEFT JOIN `workschedule` ON `workschedule`.`linked_storage` = `stock_locations`.`location_id` 
LEFT JOIN `people` ON `workschedule`.`employee_id` = `people`.`person_id` 
WHERE 
    `stock_locations`.`location_id` = 1 AND 
    `workschedule`.`checkedIn` = 0 AND 
    `items`.`unit_price` != 0 AND 
    `items`.`deleted` = 0 AND 
    `stock_locations`.`deleted` = 0 NULL 

在此先感謝!

回答

2

使它成爲parens內的OR語句。

(`stock_locations`.`location_id` = 1 OR `workschedule`.`checkedIn` = 1) AND 

這將返回與主股票或員工匹配的所有記錄。

1

您需要使用OR運算符。顯然,兩件事情不可能同時發生,所以你需要指定每一組可接受的條件。

SELECT 
    `item_quantities`.`item_id`, 
    `stock_locations`.`location_name`, 
    `item_quantities`.`quantity`, 
    `people`.`first_name` 
FROM 
    `item_quantities` 
    JOIN `stock_locations` 
    ON `item_quantities`.`location_id` = `stock_locations`.`location_id` 
    JOIN `items` 
    ON `item_quantities`.`item_id` = `items`.`item_id` 
    LEFT JOIN `workschedule` 
    ON `workschedule`.`linked_storage` = `stock_locations`.`location_id` 
    LEFT JOIN `people` 
    ON `workschedule`.`employee_id` = `people`.`person_id` 
WHERE 
    `stock_locations`.`location_id` = 1 
    OR (
     AND `workschedule`.`checkedIn` = 1 
     AND `items`.`unit_price`  != 0 
     AND `items`.`deleted`   = 0 
     AND `stock_locations`.`deleted` = 0 
     NULL 
    ) 
0

您有LEFT JOIN,但您的WHERE子句將它們變成內部連接。修復可能會解決您的問題:

SELECT . . . 
FROM item_quantities iq JOIN 
    stock_locations sl 
    ON iq.`location_id` = sl.`location_id` JOIN 
    items i 
    ON iq.`item_id` = i.`item_id` LEFT JOIN 
    workschedule ws 
    ON ws.`linked_storage` = sl.`location_id` AND 
     ws.`checkedIn` = 0 LEFT JOIN 
--------^ 
    people p 
    ON ws.`employee_id` = p.`person_id` 
WHERE sl.`location_id` = 1 AND 
     i.`unit_price` != 0 AND 
     i.`deleted` = 0 AND 
     sl.`deleted` = 0