私はプロパティ(p)と呼ばれるテーブルと証明書(c)と呼ばれるテーブルを持っています。各プロパティに対して1つ以上の証明書が割り当てられていても、全く証明書が存在しなくてもかまいません。結合を使用するクエリを生成する必要があり、プロパティごとに証明書テーブルの証明書が1つだけ表示されます。表示されている1つの証明書は、最新の有効期限の証明書である必要があります。証明書テーブルには、「certificate_expiry_date」というフィールドがあります。単純な結合はp.property_id = c.certificate_propertyですが、現在はすべての証明書が出力されています。MySQL - 左結合への句の追加
マイクエリ試み
はここで、これまでの私のクエリです。
SELECT DISTINCT t.tenancy_property, t.*, p.*, c.* FROM tenancy t
INNER JOIN property p
on t.tenancy_property = p.property_id
LEFT JOIN
(
SELECT *
FROM certificate
WHERE certificate_expiry_date > CURDATE()
ORDER BY certificate_expiry_date DESC
LIMIT 1
) c ON p.property_id = c.certificate_property
WHERE t.tenancy_type='1' AND p.property_mains_gas_supply='1' AND p.property_availability='2' ORDER BY t.tenancy_id DESC LIMIT {$startpoint} , {$per_page}
このクエリはうまく実行されますが、証明書テーブルの左結合を考慮していないようです。テーブルの
表構造あなたの更新情報
このような何かで答えを更新しましたcertificate
CREATE TABLE IF NOT EXISTS `certificate` (
`certificate_id` int(11) NOT NULL AUTO_INCREMENT,
`certificate_property` int(11) DEFAULT NULL,
`certificate_type` tinyint(4) DEFAULT NULL,
`certificate_reference` varchar(255) COLLATE utf8_bin DEFAULT NULL,
`certificate_start_date` date DEFAULT NULL,
`certificate_expiry_date` date DEFAULT NULL,
`certificate_notes` text COLLATE utf8_bin,
`certificate_renewal_instructed` tinyint(4) DEFAULT NULL,
`certificate_renewal_contractor` int(11) DEFAULT NULL,
PRIMARY KEY (`certificate_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=219 ;
クラシック "グループごとにトップnを選択"。 – shmosel
私は[タグ:グループごとの最高のn]タグを追加しました。この質問は何百回も答えられています。タグのリンクに従ってください。 –
@BillKarwin彼はただ一つのアイテムしか選択していないので、グループはありません。 – Barmar