【发布时间】:2010-12-22 05:58:04
【问题描述】:
为标记系统提供此 SQL 表:
CREATE TABLE tags (
id SERIAL PRIMARY KEY,
name VARCHAR(100)
);
CREATE INDEX tags_name_idx ON tags(name);
CREATE TABLE tagged_items (
tag_id INT,
item_id INT
);
CREATE INDEX tagged_items_tag_id_idx ON tagged_items(tag_id);
CREATE INDEX tagged_items_item_id_idx ON tagged_items(item_id);
CREATE TABLE items (
id SERIAL PRIMARY KEY,
content VARCHAR(255)
);
用户在SQL中的布尔表达式查询“tag1 AND tag2”为:
SELECT items.* FROM items
INNER JOIN tagged_items AS i1 ON (items.id = i1.item_id) INNER JOIN tags AS t1 ON (i1.tag_id = t1.id)
INNER JOIN tagged_items AS i2 ON (items.id = i2.item_id) INNER JOIN tags AS t2 ON (i2.tag_id = t2.id)
WHERE t1.name = 'tag1' AND t2.name = 'tag2';
你如何翻译其他带有布尔表达式的查询,例如“tag1 OR tag2 AND tag3”……甚至更复杂的查询,例如“tag1 AND (tag2 OR tag3) AND NOT tag4 OR tag5" 到 SQL?
【问题讨论】:
-
请问可以添加表 DATA 吗?
-
也许他的意思是“SELECT data.* FROM items”,否则 items 是未定义的。
-
是的,我在 SELECT 中弄错了(现在修复了帖子)......对此感到抱歉。