2012-01-15 197 views
0

我有兩個MySQL表'sections'和'pages'。返回第一個表數據,不管第二個表是否返回數據,操作符連接規範化

我想我們單個查詢來從一個或兩個表中獲取數據。

如果該部分和頁面存在,AND運算符正常工作。

如果該部分和頁面不存在,那麼AND運算符也不錯。

但是,我似乎無法找到一種方法來拉動節表,如果頁面不存在(AND運算符問題)與index.php網址(拉該網站的所有index.php頁面)相結合。

我試圖所以這裏寫出更好的查詢是我的目標,我曾嘗試...

我不想把所有匹配部分,然後遍歷它們的頁面。

我不想在執行第二個查詢時浪費資源,如果這可以在單個查詢中完成。

我目前有兩個如果條件化查詢(只有一個將執行給定的頁面加載),因爲'index.php'網址的頁面將拉取所有部分。

我已經使用FROM與節表一起使用,儘管我也嘗試過在頁表上使用LEFT JOIN。

這適用於不在索引的網頁...

(SELECT NULL AS meta_description FROM sections WHERE url = 'example') 
UNION 
(SELECT meta_description FROM pages WHERE url = 'something'); 

該查詢返回最多兩行是很容易的工作。


科以及頁面存在,返回結果...

SELECT * 
FROM sections AS cs 
LEFT JOIN pages AS cp ON (cp.id_section = cs.id) 
WHERE cs.section_url LIKE BINARY 'section_url' AND cp.url LIKE BINARY 'index.php' 

部分存在,頁面沒有,返回0行...

SELECT * 
FROM sections AS cs 
LEFT JOIN pages AS cp ON (cp.id_section = cs.id) 
WHERE cs.section_url LIKE BINARY 'section_url' AND cp.url LIKE BINARY 'not_exist' 

表結構...

:ID,SECTION_ID,meta_description,meta_language,meta_robots,標題,URL

部分:ID,SECTION_ID,meta_description,meta_language,meta_robots,標題,URL

最重要的是我要確保該語法是SQL中性的,因爲我打算最終從MySQL遷移到PostgreSQL。

我很樂意補充說明。如果有人能夠提出工作答案,我會同意並投票給它。

+0

你能後你有和不工作的查詢? – 2012-01-15 23:08:05

+0

我很困惑。有些事情可能有助於澄清你所問的問題:(1)發佈表格定義; (2)發佈你提及的使用'AND'的查詢; (3)張貼您提到的使用'LEFT JOIN'的提問。 – ruakh 2012-01-15 23:09:24

+0

好吧編輯帖子... – John 2012-01-15 23:11:39

回答

2

大多猜測,因爲我不知道究竟想達到什麼,但試試這個:

SELECT * 
FROM sections AS cs 
LEFT JOIN pages AS cp ON (cp.id_section = cs.id AND cp.url LIKE BINARY 'not exists') 
WHERE cs.section_url LIKE BINARY 'section_url' 
+0

嘗試一下...... – John 2012-01-15 23:20:01

+0

最初看起來不錯,只需要弄清楚我的表格結構,但我認爲這可能會成爲答案。在它上面工作... – John 2012-01-15 23:27:48

+0

好的,祝你好運。 :-)請記住,如果你有一個以上的頁面和一個給定的id_section,你會得到多個行的那一部分(每一行都有不同的頁面)。但是在加入的情況下這是無法幫助的。 – Seramme 2012-01-15 23:30:04

相關問題