我正在尝试根据第二张表中的值从第一张表中选择一堆行。
为了实现这一点,我提出了以下问题:
SELECT *
FROM table2 t2
WHERE t2.id IN(
SELECT subquery.id
FROM
(
SELECT id
FROM table1 t1
WHERE (t1.property=10 AND t1.value=0)
) AS subquery
INNER JOIN
(
SELECT id
FROM table1 t1
WHERE (t1.property=20 AND i.value=1)
) AS subquery2
on subquery.id=subquery2.id
)
根据 table1 中的属性和值,将选择 id 的特定列表用作 table2 的最终 SELECT 的条件。
子查询本身正在运行,我测试了它,我可以检索到好的 id 。
+------+
| id |
|------|
| 18 |
| 55 |
¦ ¦
问题是, IN 无效,在最后的 SELECT 结束时,我检索了table2中的所有行,而不是那些尊重条件的行与先前检索的子查询相同的 id 。
+------+------+---
| id | name |
|------|------|---
| 1 | xx |
| 2 | yy |
¦ ¦ ¦
所以我的问题是:
修改
这是请求的SQLFiddle,但奇怪的是,我发布的代码在这里工作,但不适用于我的数据库。
答案 0 :(得分:0)
SELECT * FROM table2 t2
INNER JOIN
(SELECT
subquery.id
FROM
(SELECT
id
FROM
table1 t1
WHERE
(t1.property = 10 AND t1.value = 0)) AS subquery
INNER JOIN
(SELECT
id
FROM
table1 t1
WHERE
(t1.property = 20 AND i.value = 1)) AS subquery2 ON subquery.id = subquery2.id)Z ON Z.id=t2.id
您可以尝试以上代码。 希望这会有所帮助。
答案 1 :(得分:0)
尝试如下;如果你在列中有任何空值,你就不会得到预期的结果。
common_id not in
(
select common_id from Table1
where common_id is not null
)