2010-04-07 3 views
1
структуры

Таблица идет что-то вроде этого:MySQL Query РЕГИСТРИРУЙТЕСЬ в одной таблице

Таблица: ПОКУПАТЕЛИ Колонки: ID | организация | город | состояние

Таблица: События Столбцы: id | purchaser_id

Мой запрос:

SELECT purchasers.*, events.id AS event_id 
FROM purchasers 
INNER JOIN events ON events.purchaser_id = purchasers.id 
WHERE purchasers.id = '$id' 

То, что я хотел бы сделать, это, очевидно, для выбора записей по их идентификатору из таблицы покупателей и присоединиться от событий. Это легкая часть. Я также могу легко добавить другой запрос, чтобы получить других покупателей с той же организацией, городом и штатом (есть кратные), но я хотел бы сделать все это в одном запросе. Есть ли способ, которым я могу это сделать?

Короче говоря, захватите покупателей по их идентификатору, а затем также выберите других покупателей, которые имеют одинаковую организацию, город и штат.

Спасибо.

ответ

2

Вы могли бы попробовать что-то вроде

SELECT p.*, 
     e.id 
FROM purchasers p INNER JOIN 
     events e ON e.purchaser_id = p.id INNER JOIN 
     (
      SELECT p.* 
      FROM purchasers p 
      WHERE p.id = '$id' 
     ) Original ON p.organization = Original.organization 
        AND p.city = Original.city 
        AND p.state = Original.state 

подвыборки Оригинал вернет первоначальному покупателю, а затем ссылку на покупателей столик организации, города и государства

EDIT :

Изменен вопрос , это все равно будет возвращать дубликаты, но только для количества событий, зарегистрированных на одного покупателя. Если вы хотите, чтобы получить список покупателей DISTINCT, вы не можете сделать это с идентификатором событий, так что вам нужно что-то вроде

SELECT p.* 
FROM purchasers p INNER JOIN 
     (
      SELECT p.* 
      FROM purchasers p 
      WHERE p.id = '$id' 
     ) Original ON p.organization = Original.organization 
        AND p.city = Original.city 
        AND p.state = Original.state 
+0

@astander, что очень впечатляет SQL! Спасибо за помощь. С записью, которую я тестирую, есть два события, связанных с одним из покупателей, затем еще два дублирующих покупателя с тем же именем, городом и штатом (я хочу, чтобы объединить покупателей). Ваш пример возвращает одного и того же покупателя 4 раза (2 результата для каждого события). Мысли? – jay

+0

Вы просто ищете список участников DISTINCT, без каких-либо событий? –

+0

Я ищу: а) идентификатор покупателя, который был назван b) проверить, какие события связаны с ним, и c) другие покупатели с той же организацией, городом, штатом. В конце концов мне также нужно проверить и посмотреть, есть ли у этих других дублированных покупателей какие-либо события, связанные с ними. – jay

Смежные вопросы