如果表A中的值不为空,如何从表B中获取值

时间:2016-02-10 14:22:03

标签: sql advantage-database-server

我是SQL查询的新手,但如果我用我已经使用多年的编程语言编写它,它将看起来像这样:

fnCallback({
    'draw': parseInt(draw),
    'recordsTotal': response.hits.total,
    'recordsFiltered': response.hits.total,
    'data': dataSet,
    'yadcf_data_2': [{
        value: "Trident",
        label: "Trident Eng'"
    }, {
        value: "Tasman",
        label: "Tasman Eng'"
    }]
});

最终结果应如下所示:

var table = $('#datatable').DataTable({
        "serverSide": true,
        "processing": true,
        "bStateSave": true,
        "responsive": true,
        "deferRender": true,
        "scrollX": true,
        "sDom": 'lrtip',
        "lengthMenu": [
            [10, 25, 50, 100],
            [10, 25, 50, 100]
        ],
        "pageLength": 10,
        "order": [
            [1, "asc"]
        ],
        "columns": [...],
        'fnServerData': $.fn.dataTable.elastic_datatables({
            index: index,
            type: type,
            client: client
        })
    });

yadcf.init(table, [{
        column_number: 0,
        filter_type: "range_date",
        datepicker_type: 'bootstrap-datetimepicker',
        filter_plugin_options: datetimepickerOptions
    }, {
        column_number: 1,
        filter_type: "text",
        text_data_delimiter: ","
    }, {
        column_number: 2,
        filter_default_label: "Select Filter"
    }, {
        column_number: 3,
        filter_type: "text",
        text_data_delimiter: ","
    }]);

有人可以帮我吗?

2 个答案:

答案 0 :(得分:1)

  SELECT patfile.Chart_Number
    ,  CASE WHEN patfile.employer = ''
         THEN (
            SELECT addfile.NAME AS e_name
            FROM addfile
            WHERE patfile.employer = addfile.code
            )
         ELSE patfile.employer END AS e_name
FROM patfile

答案 1 :(得分:1)

主要是LEFT JOIN到附加表。

如果第一个名称为空(或空白,取决于您的数据),则必须选择第二个名称。我不知道Advantage数据库,但不同的SQL方言以不同的方式支持这一点。

如果缺失值为null,而不是空白,则MySQL和SQLServer具有IFNULL。您的SQL看起来像这样(未经测试):

SELECT patfile.Chart_Number, IFNULL(patfile.employer, addfile.name) AS e_name
FROM patfile
LEFT JOIN addfile ON patfile.employer = addfile.code

Oracle NVL的工作方式相同,但它仅限Oracle。最好使用COALESCE,它是ANSI标准的一部分,并得到更多数据库的支持。

某些数据库具有IF功能。这也可能是ANSI标准,我不确定。您可以使用它来测试非NULL的值,例如''。

SELECT patfile.Chart_Number, IF(patfile.employer = '', patfile.employer, addfile.name) AS e_name
FROM patfile
LEFT JOIN addfile ON patfile.employer = addfile.code

请在数据库文档中查找IFISNULLCOALESCE等函数。