MySQL SELECT 在 SELECT 子句或 WHERE 子句中以便进一步过滤
MySQL SELECT in SELECT-clause or in WHERE-clause in order to filter further
我正在尝试过滤一些数据,但是由于数据来自数据库中的 2 个 table,我必须将它们合并在一起,像往常一样允许第二个 table 中的空值需要在第一个 table 中提供任何值,因为这是一个产品数据库,其中一些产品具有子组合,而一些 none。到目前为止,我想出了使用 Union 将两个 table 连接在一起的方法,但现在我需要一种使用 WHERE 子句过滤数据的方法;然而:这是我卡住的地方。我尝试将联合作为 FROM 子句中的 select 语句:没有返回数据,我试图将它作为子句放入 SELECT 子句中:没有返回数据...
简而言之,我需要这样的东西:
SELECT id_product, id_product_attribute,upc1,upc2
FROM (UNION)
WHERE upc1='xyz' OR upc2='xyz';
例如,结果可能是这样的:
-> 100, null, 9912456, null
或
-> 200, 153, 9915559, 9977123
目前我有这个(抱歉我没有更多):
(SELECT product.id_product as id_product,
product.upc as upc1,
comb.id_product_attribute,
comb.upc as upc2
FROM `db`.table1 product
LEFT JOIN `db`.table2 comb
ON comb.id_product = product.id_product
)
UNION
(SELECT product.id_product as id_product,
product.upc as headCNK,
comb.id_product_attribute,
comb.upc
FROM `db`.table1 product
RIGHT JOIN `db`.table2 comb
ON comb.id_product = product.id_product
);
另请注意,upc1 来自 table 1,upc2 来自 table2。
我可以使用整个查询,并在最坏的情况下使用一些业务逻辑过滤掉所有内容,但我不想在不需要的地方执行无休止的查询,我的服务提供商不喜欢那样...
更新:
我也试过:
SELECT *
from db.t1 as prod
CROSS JOIN db.t2 as comb ON prod.id_product = comb.id_product
WHERE prod.upc = 'xyz' OR comb.upc = 'xyz';
这个也没用。
在这里放了一个 fiddle 和一些小样本数据:
http://sqlfiddle.com/#!9/340d7d
查询中 where 子句中使用的 '991002' 的输出 SELECT id_product, id_product_attribute, table1.upc, table2.upc 应该是:101, null, 991002, null
对于“990001”,它应该是:101、201、990001、990001
对所有值尝试
SELECT t1.id_product, t2.id_product_attribute, t1.upc, t2.upc
FROM ( SELECT upc FROM table1
UNION
SELECT upc FROM table2 ) t0
LEFT JOIN table1 t1 USING (upc)
LEFT JOIN table2 t2 USING (upc)
对于确定的 upc
值编辑为
...
SELECT t1.id_product, t2.id_product_attribute, t1.upc, t2.upc
FROM ( SELECT 990001 upc ) t0
LEFT JOIN table1 t1 USING (upc)
LEFT JOIN table2 t2 USING (upc)
...
我正在尝试过滤一些数据,但是由于数据来自数据库中的 2 个 table,我必须将它们合并在一起,像往常一样允许第二个 table 中的空值需要在第一个 table 中提供任何值,因为这是一个产品数据库,其中一些产品具有子组合,而一些 none。到目前为止,我想出了使用 Union 将两个 table 连接在一起的方法,但现在我需要一种使用 WHERE 子句过滤数据的方法;然而:这是我卡住的地方。我尝试将联合作为 FROM 子句中的 select 语句:没有返回数据,我试图将它作为子句放入 SELECT 子句中:没有返回数据...
简而言之,我需要这样的东西:
SELECT id_product, id_product_attribute,upc1,upc2
FROM (UNION)
WHERE upc1='xyz' OR upc2='xyz';
例如,结果可能是这样的:
-> 100, null, 9912456, null
或
-> 200, 153, 9915559, 9977123
目前我有这个(抱歉我没有更多):
(SELECT product.id_product as id_product,
product.upc as upc1,
comb.id_product_attribute,
comb.upc as upc2
FROM `db`.table1 product
LEFT JOIN `db`.table2 comb
ON comb.id_product = product.id_product
)
UNION
(SELECT product.id_product as id_product,
product.upc as headCNK,
comb.id_product_attribute,
comb.upc
FROM `db`.table1 product
RIGHT JOIN `db`.table2 comb
ON comb.id_product = product.id_product
);
另请注意,upc1 来自 table 1,upc2 来自 table2。
我可以使用整个查询,并在最坏的情况下使用一些业务逻辑过滤掉所有内容,但我不想在不需要的地方执行无休止的查询,我的服务提供商不喜欢那样...
更新: 我也试过:
SELECT *
from db.t1 as prod
CROSS JOIN db.t2 as comb ON prod.id_product = comb.id_product
WHERE prod.upc = 'xyz' OR comb.upc = 'xyz';
这个也没用。
在这里放了一个 fiddle 和一些小样本数据: http://sqlfiddle.com/#!9/340d7d
查询中 where 子句中使用的 '991002' 的输出 SELECT id_product, id_product_attribute, table1.upc, table2.upc 应该是:101, null, 991002, null
对于“990001”,它应该是:101、201、990001、990001
对所有值尝试
SELECT t1.id_product, t2.id_product_attribute, t1.upc, t2.upc
FROM ( SELECT upc FROM table1
UNION
SELECT upc FROM table2 ) t0
LEFT JOIN table1 t1 USING (upc)
LEFT JOIN table2 t2 USING (upc)
对于确定的 upc
值编辑为
...
SELECT t1.id_product, t2.id_product_attribute, t1.upc, t2.upc
FROM ( SELECT 990001 upc ) t0
LEFT JOIN table1 t1 USING (upc)
LEFT JOIN table2 t2 USING (upc)
...