0

すでに多くの左参加の質問がありますが、それでも私はこの問題に完全に指を置くことができません。WHERE条件は、移動するのが賢明ではないように見えます。

問題は、4行が返されるはずですが、1行だけが返されることです。

左結合条件をチェックすると、左結合ごとに1行が返されます。これは、テーブル内のレコード数に対して正しいですが、以下のクエリは4ではなく1レコードを返しますが、4を返す方法がわかりません。 、 まだ。

クエリは次のとおりです:(結果は4ではなく1になり、4が期待されます)

SELECT 
 list.uid,
 list.business_uid,
 list.creator_name,
 business.company_name,
 list_alias.uid AS list_alias_uid,
 list_alias.alias AS list_alias,
 list_member.uid AS list_member_uid,
 mailbox.full_name AS list_member_name,
 mailbox.email_address AS list_member_email_address
FROM
 mailbox,
 business,
 list
LEFT JOIN
 list_alias ON list_alias.list_uid=list.uid
LEFT JOIN
 list_member ON list_member.list_uid=list.uid
WHERE
 list.business_uid='1'
 AND list.business_uid=business.uid
 AND mailbox.uid=list_member.mailbox_uid
ORDER BY
 list.full_name ASC 

データ:

ビジネスUID1には4つのリストがあります

SELECT * FROM list WHERE business_uid=1-4つの結果が得られます

SELECT * FROM list_alias WHERE list_uid IN (SELECT uid FROM list WHERE business_uid=1)--1つの結果が得られます

SELECT * FROM list_member WHERE list_uid IN (SELECT uid FROM list WHERE business_uid=1)--1つの結果が得られます

私がチェックできることについてのポインタは大歓迎です。

テーブルサンプルデータ:

リスト:

uid | business_uid | creator_name | full_name
--------------------------------------------------
 1          1         List Maker   Subscribe to W
 2          1         List Maker   Subscribe to X
 3          1         List Maker   Subscribe to Y
 4          1         List Maker   Subscribe to Z

仕事:

uid | company_name
-------------------
 1    List Company

list_alias:

uid | list_uid | alias
----------------------------------------
 1       1       subscriber@list-url.com

list_member:

uid | list_uid | mailbox_uid
------------------------------------
 1       1       1

メールボックス:

uid | full_name | email_address
-------------------------------
 1     I am He    me@me.com
4

2 に答える 2

1

このように、単一の結合方法を使用してこれを試してください。

SELECT list.uid,
    list.business_uid,
    list.creator_name,
    b.company_name,
    la.uid AS list_alias_uid,
    la.alias AS list_alias,
    lm.uid AS list_member_uid,
    m.full_name AS list_member_name,
    m.email_address AS list_member_email_address
FROM list LEFT JOIN list_member lm ON lm.list_uid=list.uid
    LEFT JOIN mailbox m ON m.uid=lm.mailbox_uid
    LEFT JOIN business b ON list.business_uid=b.uid
    LEFT JOIN list_alias la ON la.list_uid=list.uid
WHERE list.business_uid=1
ORDER BY list.full_name ASC 
于 2013-03-19T01:03:46.387 に答える
0

質問:「list」テーブルの「uid」の値は何ですか?'uid'は'business_uid'と同じではないためです。私が言いたいのは...

'list'テーブルにこれがある場合..。

'uid''business_uid' 1 1 2 1 3 1 4 1

それが問題です。同じ「busines_uid」を返しますが、異なる「uid」を返します。これは、最初のレコードにのみ一致することを意味します。

于 2013-03-19T00:47:34.017 に答える