2012-11-06 51 views
3

我有兩個表,postspagesposts表具有比pages表多的列,但除此之外它們在模式方面相同。MySQL從兩個表中選擇一行,即使只有一個表可能有該行

如果給出slug,則表slug的行可能存在於pages表或posts表中。我想的是像

SELECT * 
FROM pages 
WHERE slug = 'about' 

UNION 

SELECT * 
FROM posts 
WHERE slug = 'about' 

但需要用的slug「約」是兩個表中的行。我可以使用一個簡單的INNER JOIN,但我的SQL知識是有限的。

爲了澄清,我希望能夠在兩個表格中搜索,就好像它們是一樣的。

這裏是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 
+1

我認爲你在這裏使用'UNION'是正確的......我必須缺少一些東西 –

+1

@lc。只有當每個表返回的列數相同且數據類型相同時,UNION纔會起作用。根據上面的描述,'SELECT *'不能與'UNION'一起工作,因爲一個表的列數多於另一個表的數量,除非它們限制了返回的列。 – Taryn

+1

請發佈兩個表格的結構,如果有任何樣品數據。 –

回答

5

您可以使用聯盟,但你需要指定列(COL1,COL2,..)這兩個清單應該完全相同:

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

UNION 

SELECT col1,col2,.. 
FROM posts 
WHERE slug = 'about' 
+0

這似乎工作 - 謝謝! – svbnet

3

如果你想搜索兩個表,就好像它們一樣,你真的想使用UNION(而不是JOIN)。

上面的查詢可能會失敗,因爲表具有不同的列。您應該在兩個子查詢中指定列名稱。

相關問題