ケース: contract.id=members.cidで関連付けられた「contracts」と「members」の2つのテーブルがあります。各契約には、1人のメインメンバーと複数のセカンダリメンバー(通常はメインメンバーの子供と配偶者)がいます。メインメンバーの詳細(名前、住所など)はテーブルコントラクトに保存されますが、追加メンバーの詳細はテーブルメンバーに保存されます。(悪い論理、私は知っていますが、これは最初は混乱であり、データベースとWebサイトを再設計する時間が必要です)
必要な出力: すべての契約のバッチ印刷を実行する場合(たとえば、毎週金曜日)、各メンバーの契約のコピーも印刷する必要がありますが、メインメンバーではなく契約のメンバーの詳細を使用します。
質問:
これはどのようにmysqlクエリに変換されますか?さて、それは左結合ですが、「結合された行ではなくテーブルからデータを出力する」とはどうすればよいですか?members
contracts
2つのテーブルにある主なフィールドは、名前と名前です。ドラフトクエリの例ではこれらで十分です。
テーブルとデータの例:
contracts
-------------------------
id | name | surname |
-------------------------
1 | Tom | Jones |
2 | Jamie | Oliver |
members
--------------------------------
id | cid | name | surname |
--------------------------------
1 | 1 | Jack | Jones |
2 | 1 | Anne | Jones |
3 | 2 | Cathy | Wilson |
したがって、私が望む結果は次のようになります。
cid | name | surname |
--------------------------
1 | Tom | Jones |
1 | Jack | Jones |
1 | Anne | Jones |
2 | Jamie | Oliver |
2 | Cathy | Wilson |
私が書いたら
SELECT c.name as name, c.surname as surname, m.name as name, m.surname as surname
FROM contracts c
join members m on c.id = m.cid
私は単にnameとname_1、surnameとsurname_1になりますが、すべての名前をnameに分類し、他のすべての一致する列についても同様にします。