簡體   English   中英

SQL連接表2條語句的結果

[英]SQL join table result of 2 statements

我試圖通過JOIN從我的Wordpress數據庫中獲取SQL數據,但無法正常工作。

我需要的:

  • 發布meta_key“ gtp_product_dont_show”存在且meta_value不為“ true”的地方。
  • 並張貼meta_key“ gtp_product_dont_show”不存在的地方。

我的問題:

現在,我只獲得帖子包含meta_key“ gtp_product_dont_show”的結果,但是有些帖子沒有此關鍵字,我也需要這些。

這就是我現在所擁有的:

SELECT 
    ID, post_title
FROM 
    wp_posts p
    JOIN wp_postmeta m ON 
        p.ID = m.post_id AND 
        m.meta_key = 'gtp_product_dont_show' AND 
        m.meta_value != 'true'
WHERE 
    post_type = 'products' AND 
    post_status = 'publish'

輸出:

您需要left join

SELECT ID, post_title
FROM wp_posts p LEFT JOIN
     wp_postmeta m
     ON p.ID = m.post_id AND 
        m.meta_key = 'gtp_product_dont_show' 
WHERE (m.meta_value is null or m.meta_value <> 'true') and
      post_type = 'products' AND 
      post_status = 'publish';

left join wp_postmetawp_postmeta表中尋找適當的鍵。 然后where子句說“在沒有匹配項或值不為真時保留記錄” –我認為這是您要尋找的邏輯。

您在找這個嗎?

SELECT 
    ID, post_title
FROM 
    wp_posts p
WHERE 
    post_type = 'products' AND 
    post_status = 'publish' AND
    not exists (
        select 1 
        from wp_postmeta m
        where 
        p.ID = m.post_id AND 
        m.meta_key = 'gtp_product_dont_show' AND 
        m.meta_value = 'true')

這將從wp_posts中獲取所有行,但忽略那些從wp_postmeta中找到行的行,其中meta_key為gtp_product_dont_show且value為true。

您可以使用OR運算符同時考慮這兩種情況。 嘗試這個:

SELECT stuff
FROM myTable
JOIN otherTable ON 
   (m.meta_key = 'gtp_product_dont_show' AND m.meta_value != 'true') OR 
   (m.meta_key != 'gtp_product_dont_show')
...

只是附帶說明,我不建議將布爾值存儲為這樣的字符串。 您應該考慮使用TINYINT() ,其中布爾字段存儲為0(表示false)或1(表示true)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM