newsのような1対多の関係の場合news_files、それらすべてを1つのクエリにまとめるには、ご存知のとおり、「多」テーブルの関連する行ごとに「1」から重複する列値を取得する必要があります。
ただし、これを1つのクエリで実行する必要があるかどうかは疑問です。news_files1対1の関係の場合、行ごとに1つの行しかない場合はnews、1つのクエリでそれらを生成しようとするのが理にかなっています。ただし、1対多の場合は、メインテーブルをクエリしてから、「多くの」関係テーブルから関連する行をクエリすることもできます。
/* Returns duplicate column values for each news_files row */
/* and all columns from both tables */
SELECT
n.*,
nf.*
FROM
news n
LEFT OUTER JOIN news_files nf ON n.Id = nf.newsid
WHERE n.Id = 1
ただし、を使用して1つの列をnews_filesカンマ区切りのリストとして取得できますGROUP_CONCAT()が、これはすべての行を取得することとまったく同じではありません。MySQLでは、に表示されていない列をGROUP BYリストに含めることができますがSELECT、他のRDBMSでは許可されていないため、移植性のために、GROUP_CONCAT()はサブクエリに配置され、メインテーブルに対して結合してすべての列を取得します。
/* Comma-separated list of filePath and all cols from news */
SELECT
n.*,
nf.files
FROM
news
LEFT OUTER JOIN (
SELECT newsid, GROUP_CONCAT(filePath) AS files FROM news_feeds
GROUP BY newsid
) nf ON n.Id = nf.newsid