![](/img/trans.png)
[英]Retriving data from table, where their are 3 table A,B,C . And refrence of Table C is in B, Table's B refrence is in A
[英]Sql query to display data from table A and data from table B where parent_id of table A is found in table B using join
使用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'
我的預期結果是,將顯示滿足where要求的tableA中的數據以及具有與tableA中crm_field等效的parent_id的tableB數據。
實際結果是顯示tableB,但擁有值的parent_id除外。 還似乎它在crm_field = 0和parent_id = 0時查詢,當我希望它在crm_field具有實際值(如22)時也要查詢時,也可以在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,它將執行另一個查詢以將相應的值添加到數組。 但是我想用盡可能少的代碼來實現這一點,因此我正在嘗試加入。
跟隨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
作為外鍵附加了一些特殊含義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.