SQL-запрос Mysql через 2 таблицы - не уверен, как это сделать правильно - PullRequest
0 голосов
/ 26 мая 2009

У меня есть две таблицы, настроенные так (нерелевантные строки опущены):

> product
  - id
  - user_id

> thread
  - id
  - prod_id
  - user_id
  - due_date

Теперь я хочу создать запрос, который выбирает все строки из таблицы потоков, которые либо:

  1. имеет thread.user_id (например) "5"
  2. имеет prod_id, где product.user_id равен "5"

Я предполагаю, что есть способ сделать что-то вроде ...

SELECT 
    thread.due_date 
FROM
    product, thread 
WHERE 
    thread.user_id='5' 
OR 
    // not sure how to finish it

До этого момента я просто использовал PHP для этого, но очень хотел бы поднять свои знания SQL на ступеньку выше и заставить это работать через SQL, если возможно.

Спасибо -

Ответы [ 3 ]

3 голосов
/ 26 мая 2009

Вы должны иметь возможность использовать внешнее объединение, чтобы сделать это:

SELECT thread.* FROM thread 
LEFT OUTER JOIN product
ON thread.prod_id = product.id
WHERE thread.user_id = 5 OR product.user_id = 5

Проблема, с которой вы можете столкнуться, состоит в том, что вы можете получить дубликаты потоков, если поток имеет идентификатор пользователя 5, а также продукт с идентификатором пользователя 5. Хотя не уверен, что это будет проблемой в вашем случае. Вы можете использовать SELECT DISTINCT, чтобы удалить их (спасибо Алекс Мартелли)

1 голос
/ 26 мая 2009

Я бы сделал что-то вроде:

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

Edit: Мой пример использует стандарт 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)

Однако, посмотрите Начиная с MySQL - в нем есть хорошая информация о двух стандартах.

0 голосов
/ 26 мая 2009
SELECT thread.* LEFT OUTER JOIN product ON thread.prod_id=product.id WHERE thread.user_id=5 OR product.user_id=5;

Я не уверен насчет потока SELECT. * Но это имеет смысл, так как эта таблица. * Материал работает при предоставлении привилегий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...