我有一个脚本,其中签入员工可以看到彼此的库存清单,链接到他们的个人库存位置,所以每个签入员工可以看到哪些物品在不同的地点库存。但是,我希望始终显示主股票( 1的id,它没有附加到员工),但我无法正确地查询,因为其中一个where语句显然不正确:
`stock_locations`.`location_id` = 1 AND
`workschedule`.`checkedIn` = 1 AND Rememeber,主股票没有链接到员工,所以它不会出现在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提前感谢!
发布于 2017-08-04 15:54:32
让它在父母的内部成为一个或语句。
(`stock_locations`.`location_id` = 1 OR `workschedule`.`checkedIn` = 1) AND这将返回与主股票或员工匹配的所有记录。
发布于 2017-08-04 15:53:19
您需要使用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
)发布于 2017-08-04 15:55:08
您有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` = 0https://stackoverflow.com/questions/45510928
复制相似问题