0

了解しました。これを解決するにはサブクエリが必要だと思いますが、これらについては少し錆びています。だから私は3つのテーブルを持っています:

tblAccount
tblItem
tblAccountItem

tblAccount-ユーザー情報とAccountIDがあります
tblItem-アイテム情報とItemID
がありますAccountID-3つのフィールドがあります-AccountItemID/AccountID / ItemID

アカウントには多くのアイテムを含めることができ、アイテムには多くのアカウントを含めることができます。データ例:

tblAccount

AccountID    AccountName     AccountEmail
1            John Smith      john@smith.com
2            Fred John       fred@john.com
3            George Mike     george@mike.com

tblItem

ItemID       ItemName        ItemDescription
1            Hammer          Smashes things
2            Axe             Breaks things

では、ハンマーがジョン、フレッド、ジョージに属しているとしましょう。斧はジョンとフレッドだけに属しています。

tblAccountItem

AccountItemID       AccountID     ItemID
1                   1             1
2                   2             1
3                   3             1
4                   1             2
5                   2             2

だから私はジョンが持っているアイテムを示し、他に誰がそのアイテムを所有しているのかを示したいと思います。表示したい出力は次のとおりです。

ItemName            ItemDescription    OtherOwners
Hammer              Smashes things     Fred, George
Axe                 Breaks things      Fred

どんな助けでも大歓迎です!

ctraheyによる答えは完璧ですが、追加する条件が少しあります。tblAccountには、フィールドで示される2種類のアカウントがあります。

tblAccount

AccountID    AccountName     AccountEmail       AccountDescription    AccountTypeID
1            John Smith      john@smith.com     NULL                  1
2            Fred John       fred@john.com      NULL                  1
3            George Mike     george@mike.com    Runner                2

tblAccountTypeID

AccountTypeID   AccountType     
1               User      
2               Admin     

AccountTypeIDが1の場合、AccountEmailを出力する必要があります。AccountTypeIDが2の場合、AccountDescriptionを出力する必要があります。例:出力(上記と同じストーリー):

ItemName            ItemDescription    OtherOwners
Hammer              Smashes things     Fred, Runner
Axe                 Breaks things      Fred

ctraheyという質問をやめて、ALIASフィールドを作成する必要があると思います。何かのようなもの:

WHERE AccountTypeID = 1 (SELECT AccountName)
WHERE AccountTypeID = 2 (SELECT AccountDescription)

これが理にかなっていることを願っています、これまでのすべての助けに感謝します!

4

3 に答える 3

0

コーディングを使用してこれを再販する方がよいでしょう。ここでは、アイデアを得るのに役立つ可能性のある大まかなクエリを使用します。

SELECT AccountName
FROM tblAccount
WHERE AccountID = (SELECT AccoundID 
                   FROM tblAccountItem
                   WHERE itemID = (SELECT itemID
                                   FROM tblAccountItem
                                   WHERE AccountID = 1 (john Id as example)));

お役に立てれば

于 2012-08-26T00:53:00.763 に答える
0

サブクエリが実際に必要になることはめったになく、多くの場合、適切に設計されたJOINに置き換えられます(パフォーマンスが向上します)。

ここでは、AccountItemテーブルから始めます(WHERE句は、クエリを対象のアカウントが所有するアイテムのみにすぐに制限します)。次に、同じテーブルを結合し('others_items_join'にエイリアスします)、同じitemIDで結合するように指示しますが、関心がある場合はアカウントが所有していません。これがクエリ全体の本質です。次の2つの結合は、出力に含める実際の文字列(他の人の名前とアイテムの名前/説明)を取り込むためだけのものです。GROUP BYは、関心のあるアカウントが持つアイテムごとに1行だけを与えるために使用されます。

SELECT 
  ItemName,
  ItemDescription,
  GROUP_CONCAT(others.AccountName) as OtherOwners
FROM 
  tblAccountItem as my_items
  LEFT JOIN tblAccountItem as others_items_join 
    ON others_items_join.ItemID = my_items.ItemID AND others_items_join.AccountID != ?
  LEFT JOIN tblAccount as others
    ON others_items_join.AccountID = others.AccountID
  JOIN tblItems ON my_items.ItemID = tblItems.ItemID
WHERE my_items.AccountID = ?
GROUP BY ItemName
于 2012-08-26T00:59:36.703 に答える
0

SELECT ItemName, ItemDescription, AccountItemID FROM tblitem RIGHT JOIN tblaccountitem ON tblitem.ItemID=tblaccountitem.ItemID

これがあなたの答えにつながることを願っています。私はまだこれを調べています

于 2012-08-26T01:19:45.980 に答える