首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于多个where条件的SQL查询

基于多个where条件的SQL查询
EN

Stack Overflow用户
提问于 2017-08-04 15:48:52
回答 3查看 36关注 0票数 1

我有一个脚本,其中签入员工可以看到彼此的库存清单,链接到他们的个人库存位置,所以每个签入员工可以看到哪些物品在不同的地点库存。但是,我希望始终显示主股票( 1的id,它没有附加到员工),但我无法正确地查询,因为其中一个where语句显然不正确:

代码语言:javascript
运行
复制
`stock_locations`.`location_id` = 1 AND 
`workschedule`.`checkedIn` = 1 AND 

Rememeber,主股票没有链接到员工,所以它不会出现在workschedule表中。如果我删除第一个语句,它会清楚地显示所有签入的员工的位置,但这并不能给我主要的股票。如果我删除第二个语句,它只显示主要股票。

如何在SQL中解决这个问题?这就是全文:

代码语言:javascript
运行
复制
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

提前感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-08-04 15:54:32

让它在父母的内部成为一个或语句。

代码语言:javascript
运行
复制
 (`stock_locations`.`location_id` = 1 OR `workschedule`.`checkedIn` = 1) AND

这将返回与主股票或员工匹配的所有记录。

票数 2
EN

Stack Overflow用户

发布于 2017-08-04 15:53:19

您需要使用OR操作符。显然,这两种情况不能同时发生,因此您需要指定每一组可接受的条件。

代码语言:javascript
运行
复制
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
    )
票数 1
EN

Stack Overflow用户

发布于 2017-08-04 15:55:08

您有LEFT JOIN,但是WHERE子句将它们转换为内部联接。修复这个问题可能会解决您的问题:

代码语言:javascript
运行
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45510928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档