首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用3表的Mysql查询返回错误的数据

使用3表的Mysql查询返回错误的数据
EN

Stack Overflow用户
提问于 2014-12-16 07:38:24
回答 1查看 85关注 0票数 1

表1 ->访问控制

代码语言:javascript
复制
1) user_uuid
2) product_id
3) facebook_uuid

表2 ->产品表

代码语言:javascript
复制
1) product_id
2) product_name
3) status
4) visibility
5) result
6) user_uuid

表3 ->招标表

代码语言:javascript
复制
1) product_id
2) user_uuid
3) options

样本数据

产品表:-

代码语言:javascript
复制
ID - Name - status - visibility - result  - user_uuid
1  - T1   - 1      -     1      -   0     -    1
2  - T2   - 1      -     1      -   0     -    1
3  - T3   - 0      -     0      -   1     -    1

访问控制

代码语言:javascript
复制
user_uuid    -    product_id    -    facebook_uuid

    1        -        1         -         123
    1        -        1         -         456
    1        -        1         -         789

    1        -        2         -         123
    1        -        2         -         456
    1        -        2         -         789

    1        -        3         -         123
    1        -        3         -         456
    1        -        3         -         789

投标表:-最初这个表将不会有任何数据,因为一旦任何用户出价的产品,然后只有这个数据将被输入。

代码语言:javascript
复制
product_id   -   user_uuid   - options
   1         -      2        -  123.35

用户表:-

代码语言:javascript
复制
user_uuid   -   facebook_uuid
   1        -      007
   2        -      123
   3        -      456
   4        -      789

说明:-

用户1创建了3款产品,并与其他facebook用户共享。为了管理共享,我们创建了访问控制表,跟踪用户1与其他用户共享的产品的记录。您可以在访问控制表中检查这一点。

现在产品是与其他人共享的,这样用户就可以看到他们屏幕上的产品和他们共享的产品。

我们有两个标签屏幕上的->共享和出价。

共享->在这里,用户将看到与他们共享的产品,但他们还没有对该产品出价。一旦用户对任何产品出价,我们就在投标表中输入,如上所示。

出价->在这里,用户将看到他们的产品,他们的出价。

我们的查询:-

代码语言:javascript
复制
SELECT * 
FROM PRODUCT TABLE 
WHERE product_id IN 
    ( SELECT product_id 
      from ACCESS TABLE 
      where facebook_uuid ='123' 
        and product_id not in 
           ( Select product_id from BID TABLE) 
    )  
or product_id IN 
    ( SELECT product_id 
      from ACCESS TABLE 
      where user_uuid  IN 
           ( select user_uuid 
             from USER TABLE 
             where facebook_uuid = '123' 
           ) 
       and product_id not in 
           ( Select product_id from BID TABLE )
     ) 
AND result = 0 
AND status = 1 
AND visibility = 1

这应该返回我的产品2,因为用户2已经为产品1和产品3的状态和可见性标准不匹配的出价。但是上面的查询是给我的产品2和3都错了。

我们使用3表获取数据,并寻求专家的帮助,以指导。

注意-我们必须检查2件重要的事情,我们不能在我们的查询中做的是,用户不能有出价和与用户分享的产品创建者。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-16 08:45:52

第一个子查询选择与给定用户共享的产品,第二个子查询选择给定用户已经出价的产品。因此,查询选择产品,即in第一个列表(由第一个子查询选择),而not in第二个列表(由第二个子查询选择)。

代码语言:javascript
复制
select *
from product_table
where
    result=0 and
    status=1 and
    visibility=1 and
    product_id in (
        select product_id            
        from access_table
        where facebook_uuid='123'
    ) and
    product_id not in (
        select product_id
        from
            bid_table join
            user_table on user_table.user_uuid=bid_table.user_uuid
        where facebook_uuid='123'
    )

http://www.sqlfiddle.com/#!2/d59cb/2

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27499731

复制
相关文章

相似问题

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