仅返回针对查找表验证的记录

时间:2011-11-28 15:51:00

标签: mysql sql

我正在使用MySQL并且有一些问题我正在努力寻找修复方法。我可以通过PHP使用一些查询以编程方式实现这一点,但我确信我可以将它作为单个查询来实现:)

我有3张桌子:

  1. 产品
  2. product_keywords
  3. valid_keywords
  4. 每个产品都有许多关键字,这些关键字由“product_keywords”表中的keyword_id引用。 “valid_keywords”表仅包含允许的关键字(即作为查找表)。我只需要返回关键字与“valid_keywords”表中的关键字匹配的产品。

    有效产品不得包含任何不在“valid_keywords”表格中的关键字。

    以下是一些测试表/记录:

    - 表格产品的表格结构

    CREATE TABLE `products` (
      `prod_id` int(11) NOT NULL,
      `prod_name` varchar(10) NOT NULL,
      KEY `prod_id` (`prod_id`)
    );
    

    - 表格产品的数据

    INSERT INTO `products` (`prod_id`, `prod_name`) VALUES(1, 'Prod 1');
    INSERT INTO `products` (`prod_id`, `prod_name`) VALUES(2, 'Prod 2');
    INSERT INTO `products` (`prod_id`, `prod_name`) VALUES(3, 'Prod 3');
    INSERT INTO `products` (`prod_id`, `prod_name`) VALUES(4, 'Prod 4');
    

    - 表product_keywords的表结构

    CREATE TABLE `product_keywords` (
      `prod_id` int(11) NOT NULL,
      `keyword_id` int(11) NOT NULL,
      KEY `prod_id` (`prod_id`),
      KEY `keyword_id` (`keyword_id`)
    );
    

    - 表product_keywords的数据

    INSERT INTO `product_keywords` (`prod_id`, `keyword_id`) VALUES(1, 1);
    INSERT INTO `product_keywords` (`prod_id`, `keyword_id`) VALUES(1, 2);
    INSERT INTO `product_keywords` (`prod_id`, `keyword_id`) VALUES(2, 2);
    INSERT INTO `product_keywords` (`prod_id`, `keyword_id`) VALUES(2, 4);
    INSERT INTO `product_keywords` (`prod_id`, `keyword_id`) VALUES(3, 4);
    INSERT INTO `product_keywords` (`prod_id`, `keyword_id`) VALUES(3, 6);
    INSERT INTO `product_keywords` (`prod_id`, `keyword_id`) VALUES(4, 7);
    INSERT INTO `product_keywords` (`prod_id`, `keyword_id`) VALUES(4, 8);
    

    - 表valid_keywords的表结构

    CREATE TABLE `valid_keywords` (
      `keyword_id` int(11) NOT NULL,
      `keyword_name` varchar(10) NOT NULL,
      KEY `keyword_id` (`keyword_id`)
    );
    

    - 表格的数据valid_keywords

    INSERT INTO `valid_keywords` (`keyword_id`, `keyword_name`) VALUES(2, 'Keyword 2');
    INSERT INTO `valid_keywords` (`keyword_id`, `keyword_name`) VALUES(4, 'Keyword 4');
    INSERT INTO `valid_keywords` (`keyword_id`, `keyword_name`) VALUES(7, 'Keyword 7');
    INSERT INTO `valid_keywords` (`keyword_id`, `keyword_name`) VALUES(8, 'Keyword 8');
    

    对于示例数据,查询应返回产品2& 4。

    希望你们能指出我正确的方向。

    感谢。

0 个答案:

没有答案