2013-05-01 17 views
0

我無法理解如何寫一個特定的MySQL查詢來執行關係部門/相交。我已經看過下面的鏈接/ SO問題,但我仍然困惑:如何寫一個特定的MySQL查詢來執行關係部門/相交? Id est,我要寫什麼查詢?

MySQL equivalent of IN() clause doing Logical AND; Relational Algebra : Division; Divided we Stand; Advanced SQL : Intersect; Doing INTERSECT and MINUS in MySQLAlternative to INTERSECT in MySQL

我試圖修改「MySQL的INTERSECT的替代方法」中顯示的SQL查詢,但在執行過程中丟失了。

Want : package.* from package WHERE package.pkid equalto package_products.pkid AND package_products.pid is_all_of (
    WANT : option_products.pid FROM option_products 
    WHERE option_products.oid = [optionID] 
), // returning packages that have all of the product IDs (pids) and not just one of them. 
[OptionID] = $option 

的MySQL(內db_query():

"SELECT package.* FROM package WHERE package.pkid = package_products.pkid && package_products.pid is_allof(". 
    // What do I use in place of 'is_all_of'? How do I do an intersection/ relational division with INNER JOIN and/ or USING(pid)? 
" SELECT options_products.pid FROM options_products WHERE options_products.oid = :option 
)", array(":option" => $option) 

回答

0

也許我失去了一些東西,但我想說,

db_query("SELECT package.* FROM package 
WHERE package.pkid = package_products.pkid 
&& package_products.pid IN 
(SELECT options_products.pid FROM options_products 
WHERE options_products.oid = %d)", $option)); 

應該爲你工作。

我已經重寫你的語法,以滿足Drupal的6 db_query要求(http://api.drupal.org/api/drupal/includes!database.mysql-common.inc/function/db_query/6)。

+0

IN是OR條件(是的一個)。我所追求的是AND條件(全是)。 – 2013-05-03 17:56:59