3

私は2つのテーブルを持っていpostsますpages. テーブルにはpostsテーブルよりも多くの列がありpagesますが、それ以外はスキーマに関しては同じです。

aslugが指定されている場合、右側の行がテーブルまたはテーブルにslug存在する可能性があります。みたいなことを考えていたpagesposts

SELECT * 
FROM pages 
WHERE slug = 'about'

UNION 

SELECT * 
FROM posts 
WHERE slug = 'about'

slugただし、「about」の行が両方のテーブルにある必要があります。おそらく簡単INNER JOINに使用できるものがありますが、SQL の知識は限られています。

明確にするために、両方のテーブルを 1 つのテーブルのように検索できるようにしたいと考えています。

postsテーブル構造は次のとおりです。

`slug` varchar(128) NOT NULL,
`id` varchar(100) NOT NULL,
`title` text NOT NULL,
`published` bigint(20) NOT NULL,
`content` longtext NOT NULL,
`author` text NOT NULL,
`status` enum('published','draft','trashed') NOT NULL

そしてpages構造:

`slug` varchar(128) NOT NULL,
`id` varchar(100) NOT NULL,
`title` text NOT NULL,
`content` longtext NOT NULL,
`menu_order` int(11) DEFAULT NULL,
`status` enum('published','drafted','trashed') NOT NULL
4

2 に答える 2

7

ユニオンを使用できますが、列(col1、col2、..)を指定する必要があります。2 つのリストは同一である必要があります。

SELECT col1,col2,.. 
FROM pages 
WHERE slug = 'about' 

UNION

SELECT col1,col2,.. 
FROM posts 
WHERE slug = 'about'
于 2012-11-06T14:29:31.383 に答える
3

両方のテーブルを 1 つのテーブルであるかのように検索する場合は、(JOIN ではなく) UNION を使用する必要があります。

テーブルの列が異なるため、上記のクエリはおそらく失敗します。2 つのサブクエリで列名を指定する必要があります。

于 2012-11-06T14:31:23.347 に答える