我设置了2个这样的表(省略了无关的行):
> product
- id
- user_id
> thread
- id
- prod_id
- user_id
- due_date
现在我想创建一个查询,从线程表中选择所有行:
我假设有办法做到这一点,比如......
SELECT
thread.due_date
FROM
product, thread
WHERE
thread.user_id='5'
OR
// not sure how to finish it
到目前为止,我只是使用PHP来实现这一点,但是我真的希望将SQL知识提升一个档次,并尽可能通过SQL实现。
谢谢 -
答案 0 :(得分:3)
您应该可以使用外部联接来执行此操作:
SELECT thread.* FROM thread
LEFT OUTER JOIN product
ON thread.prod_id = product.id
WHERE thread.user_id = 5 OR product.user_id = 5
您可能会发现的一个问题是,如果某个线程的用户ID为5,那么您可能会获得重复的线程,但也会产生一个用户ID为5的产品。但不确定这是否会在您的情况下出现问题。您可以使用SELECT DISTINCT
删除这些(感谢Alex Martelli)
答案 1 :(得分:1)
我会做类似的事情:
SELECT t.due_date
FROM thread t
INNER JOIN product p ON p.id = t.prod_id
WHERE t.user_id = 5 OR p.user_id = 5
修改强> 我的例子是使用SQL 92标准。如果您想坚持使用原始帖子中的SQL-89样式连接,您可以执行以下操作:
SELECT thread.due_date
FROM product, thread
WHERE product.id = thread.prod_id
AND (thread.user_id = 5 OR product.user_id = 5)
但是,请查看Beginning MySQL - 它有关于这两个标准的一些很好的信息。
答案 2 :(得分:0)
SELECT thread.* LEFT OUTER JOIN product ON thread.prod_id=product.id WHERE thread.user_id=5 OR product.user_id=5;
我不确定SELECT线程。*但它有意义,因为该表。* stuff在GRANTing权限时有用。