私は2つのテーブル、場所、場所_連絡先を持っています。最も小さい番号contact_id有するもの - - 一次コンタクトとみなされる左のジョインの注文結果が機能しない
mysql> describe locations;
+----------------+----------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+----------------------------+------+-----+---------+----------------+
| location_id | int(4) | NO | PRI | NULL | auto_increment |
| location_name | varchar(100) | YES | | NULL | |
+----------------+----------------------------+------+-----+---------+----------------+
mysql> describe locations_contacts;
+---------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+----------------+
| contact_id | int(6) | NO | PRI | NULL | auto_increment |
| location_id | int(4) | YES | | NULL | |
| contact_name | varchar(100) | YES | | NULL | |
+---------------+--------------+------+-----+---------+----------------+
各位置は、複数のコンタクトが、入力された最初のものを有することができます。私は単一のクエリでロケーション名とプライマリコンタクトを取得できるようにしたい。これは最初に働いたものです:
select a.location_id, a.location_name, b.contact from locations as a
left join (
select location_id, contact_name as contact
from locations_contacts
group by location_id
) as b on (a.location_id = b.location_id)
where (location_name like '%wesleyan%' or contact like '%wesleyan%')
order by location_name;
問題は、locations_contactsの順序が一貫していないことです。 InnoDBを使用している間は問題ありませんでしたが、これはndbクラスタ設定でホストされています。左結合内で返される結果の順序が矛盾しているため、場所が複数ある場合は基本的にランダムな結果になります。左寄せで "order by"を使うと、順序付けができる前にグループ化が行われるので、group by節を削除することはできません。なぜなら、返される各位置に対して1つのレコードしか必要ないからです。
誰もがこれを手伝ってくれますか?私は最後の1日かそこそこで私の髪を引き裂いてきました。
isPrimary列などを追加することはできませんか? – Nope
それは可能ですが、私はそれが最後の手段であることを望みます。私はこのような問題がどこかで起こった場合にこのように解決することを望んでいました。 – loungehead