根据表B从表A获取数据

时间:2015-08-10 13:45:39

标签: mysql sql

我需要一些帮助...

表A(操作)

table_a_id
data

表B(操作元数据)

table_b_id
table_a_id
data_field_id_1
data_field_id_2
data_field_id_3

用户可以选择下拉列表:

  • 元数据字段1作为多选选项,显示第一个条目 as"空"
  • 元数据字段2作为多选选项,第一个条目显示为"空"

用户希望获得适合多选项的所有操作。

我的想法如下:

我需要从表A中获取所有行,

  • 其中表格b data_field_id_1 IN(某些ids)
  • 或表B data_field_id_2 IN(某些ID)
  • 或table_a_id不在表B
  • 或data_field_id_1 IS NULL
  • 或data_field_id_2 IS NULL
  • 或data_field_id_3 IS NULL

任何人都可以帮我解决这个SQL查询吗? 我变得越来越困惑。

3 个答案:

答案 0 :(得分:0)

select a.*
from tablea a join tableb b 
on a.table_a_id <> b.table_a_id
where b.data_field_id_1 IN (1,2,3) --replacement needed 
or b.data_field_id_2 IN (4,5,6) --replacement needed
-- or a.table_a_id is NOT IN Table B
or b.data_field_id_1 IS NULL
or b.data_field_id_2 IS NULL
or b.data_field_id_3 IS NULL

这应该让你开始。这些表格根据您的某个条件join进行table_a_id is NOT IN Table B

答案 1 :(得分:0)

我会尝试使用LEFT OUTER JOIN向您展示tablea在tableb中没有子项的行

SELECT a.table_a_id, 
  a.data 
FROM TABLEA a
  LEFT OUTER JOIN TABLEB b ON a.table_a_id = b.table_a_id
WHERE b.data_field_id_1 IN (your ids)
  OR b.data_field_id_2 IN (your other ids)
  OR b.data_field_id_1 IS NULL
  OR b.data_field_id_2 IS NULL
  OR b.data_field_id_3 IS NULL

答案 2 :(得分:0)

SELECT T1.*, T2.* FROM table_a
LEFT JOIN table_b
ON T1.table_a_id = T2.table_a_id
where T2.data_field_id_1 IN (--values)
OR T2.data_field_id_2 IN (--values)
OR T1.table_a_id is NOT IN table_b
OR T2.data_field_id_1 IS NULL
OR T2.data_field_id_2 IS NULL
OR T2.data_field_id_3 IS NULL

你可以做JOIN但我喜欢使用LEFT JOIN并排查看数据: - )