使用MySQL。
我有两张桌子。表A和表B.
表A有一些值具有与表B相关的ID。该ID在表A中标识为crm_field,在表B中标识为parent_id。
我尝试过这个查询。
select *
from tableA inner join tableB ON tableA.crm_field=tableB.parent_field
WHERE tableA.id = '75' AND
tableA.category != 'null' AND
tableA.category != 'No Category'
我的预期结果是来自tableA的满足where要求的数据将与tableB的数据一起显示,tableB保存的parent_id等同于tableA中crm_field的数据。
实际结果是显示tableB,但保存值的parent_id除外。当crm_field = 0和parent_id = 0时,它似乎也要查询,当我想让它查询时crm_field有一个像parent一样的实际值,也可以在parent_id中找到。尝试这样做:
select *
from tableA inner join tableB ON tableA.crm_field=tableB.parent_field
WHERE tableA.id = '75' AND
tableA.category != 'null' AND
tableA.category != 'No Category' AND
tableA.crm_field != '0'
但它只显示了我需要添加到tableA的tableB中的数据。
有没有办法使用连接查询?
如果不是我也可以进行双重查询。
感谢
示例输出:
tableA
id|name|crm_field|category
0|dog|0|hi
1|cat|22|hi
2|bear|0|null|
tableB
id|name|parent_id|
0|wild|22|
1|foo|0|
显示应该是这样的:
0|dog|0|hi
1|cat|22|hi
2|wild|22
- 如果可能的话?
要达到我想在这里完成的目的是:
crm_field有一些值。
但是如果查询在crm_field中看到22或21或两者,那么它应该显示在tableB中找到的相应值。
知道我这样做,如果crm_field == 21或22它将执行另一个查询以将相应的值添加到数组。但我希望用尽可能少的代码来实现这一目标,因此我正在尝试加入。
答案 0 :(得分:1)
关注UNION
会获得给定输入的输出
SELECT id, name, crmfield
FROM TableA
WHERE category != 'null'
UNION ALL
SELECT a.id, b.name, a.crmfield
FROM TableA AS a
INNER JOIN TableB AS b ON b.parent_id = a.crm_field
WHERE parent_id != '0'
但是您的表格设计存在一些问题(正如JohnFx已经提到的那样)
'null'
字符串值。parent_id
与crm_field
相关联。我建议将TableB.parent_id
重命名为TableB.crm_field
,以便明确该链接。TableB.foo
条记录。这让我很奇怪。我可以想象你只想要一些关系的某些部分归还,但在这里你似乎已经将0
作为外键附加了一些特殊含义。