2017-08-04 15 views
1

従業員のチェックインした場所で個人の在庫場所とリンクしている在庫リストを見ることができるので、チェックインされた各従業員はどのアイテムが異なる在庫であるかを見ることができます場所。しかし、私はメインの株式(社員に添付されていない1のIDは、)常に示したことにしたいが、whereステートメントのいずれかが明らかに正しくないので、私は、クエリの権利を取得することはできません。複数の条件に基づくSQLクエリ

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

Rememeber、主な在庫は従業員にリンクされていないので、workscheduleテーブルには表示されません。私は最初の声明を削除した場合、チェックインした従業員のすべての場所が明確に表示されますが、それは私に主要な在庫を与えません。私が2番目のステートメントを削除すると、それは私にメインの株式のみを表示します。

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

括弧内に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 
関連する問題