SQL-запрос для соответствия продавцов и покупателей - PullRequest
3 голосов
/ 31 января 2012

Хорошо, у меня есть один стол с людьми. Одна таблица с предметами, которые раздаются, а другая с предметами, которые нужны людям.

People:
Person_ID, Name

Giveaways:
Person_ID, Item_ID

Wishlist:
Person_ID, Item_ID

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

Так что, если я хочу обменяться предложениями для человека А, он должен вернуть список людей, которые раздают предмет, который хочет человек А, и хотят, чтобы предмет, который раздает человек А. Результат должен включать: элемент персоны А, имя человека, с которым также производится обмен, а также id и item_ID.

Ответы [ 3 ]

1 голос
/ 31 января 2012

@ SérgioMichels ответ должен быть правильным. Но он не получает имя продавца и использует синтаксис, которого (на мой взгляд) следует избегать.

Итак, вот альтернатива ...

SELECT
  buyer.name          AS buyer,
  buyerWants.name     AS buyer_wants,      (assuming the items have names),
  buyerHas.name       AS buyer_has,
  seller.name         AS seller,
  sellerWants.name    AS seller_wants,
  sellerHas.name      AS seller_has
FROM
  People              AS buyer
INNER JOIN
  Wishlist            AS buyerWants
    ON buyerWants.person_id = buyer.person_id
INNER JOIN
  Giveaways           AS sellerHas
    ON sellerHas.item_id = buyerwish.item_id
INNER JOIN
  People              AS seller
    ON seller.person_id = sellerHas.seller_id
INNER JOIN
  WishList            AS sellerWants
    ON sellerWants.person_id = seller.person_id
INNER JOIN
  GiveAways           AS buyerHas
    ON  buyerHas.item_id = sellerWants.item_id
    AND buyerHas.person_id = buyer.person_id
WHERE
  buyer.person_id = ?
0 голосов
/ 02 февраля 2012
select
      AllGiveWish.WhichWay,
      AllGiveWish.Item_ID,
      p1.Name as MainPersonName,
      p2.Name as OtherPersonName
   from
      ( select   
              "Give" as WhichWay,
              G.Item_ID,
              G.Person_ID as MainPerson,
              W.Person_ID as OtherPerson
           from
              GiveAways G
                 JOIN WishList W
                    on G.Item_ID = W.Item_ID
           where
              G.Person_ID = YourSinglePersonParm 
        UNION ALL
        select   
              "Wish" as WhichWay,
              W.Item_ID,
              W.Person_ID as MainPerson,
              G.Person_ID as OtherPerson
           from
              WishList W
                 JOIN GiveAways G
                    on W.Item_ID = G.Item_ID
           where
              W.Person_ID = YourSinglePersonParm ) As AllGiveWish

      join People P1
            on AllGiveWish.MainPerson = P1.Person_ID

      join People P2
            on AllGiveWish.OtherPerson = P2.Person_ID
0 голосов
/ 31 января 2012

Я думаю, что вам нужно что-то вроде этого:

select p.*
     , w.item_id  item_wanted
     , g.person_id  person_giveaway
  from People p
     , Wishlist w
     , Giveaways g
 where p.person_id = ?
   and p.person_id = w.person_id
   and g.person_id != p.person_id
   and g.item_id = w.item_id
   and exists( select 1
                 from Wishlist w1
                    , Giveaways g1
                where g1.person_id = p.person_id
                  and g1.item_id   = w1.item_id
                  and w1.person_id = g.person_id )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...