0

我有这个选择查询

SELECT * FROM Category cgy, Product pd, Transactions tr 
 WHERE  cgy.cid= 1
   AND tr.payment_status = 'Completed'
   AND pd.pid=cgy.pid`

通过该查询,我只想得到 1 个结果,但不幸的是,我得到了 2 个相同的结果。我不明白为什么,因为我已经加入了主键和外键。

Transactions没有与任何这些表相关的任何键

更新

产品表

pid  Name  

1    green
2    red
3    blue

类别表

cid    pid
1       1 
2       2
3       3

交易表

tid     payment_statue    address1
1          Completed        1 hello road
2          incomplete       2 inactive road
4

1 回答 1

0

在您更新问题后,如果您有一行值为payment_statuscompleted”,则此查询将返回单个结果。如果您有多个行作为 payment_status 作为 ' completed' 然后添加表中的foreign key引用productsay pid

所以你可以试试:

alter table transactions add(pid int(10));

ALTER TABLE transactions ADD CONSTRAINT fk_product_id FOREIGN KEY (pid) references product(pid);

并重写查询添加:

select * FROM Category cgy, Product pd, Transactions tr WHERE cgy.cid = 1 and tr.payment_status = 'completed' and pd.pid = cgy.pid and pd.pid = tr.pid

这将起作用。

于 2013-08-26T10:29:14.847 回答